【发布时间】:2013-07-30 11:41:55
【问题描述】:
根据 MSDN:StringComparison.InvariantCulture:
指定 String.Compare 的某些重载要使用的区域性、大小写和 排序 规则 String.Equals 方法。
好吧,我没有在我的示例中进行 任何 排序,而且仍然不明白为什么它会产生它产生的结果:
/*1*/ void Main()
/*2*/ {
/*3*/ string s1 = "lasst";
/*4*/ string s2 = "laßt";
/*5*/ Console.WriteLine (s1.Equals(s2, StringComparison.InvariantCulture));
/*6*/ //True
/*7*/
/*8*/
/*9*/
/*10*/ string s3 = "hello";
/*11*/ string s4 = "héllo";
/*12*/ Console.WriteLine (s3.Equals(s4, StringComparison.InvariantCulture));
/*13*/ //False
/*14*/ }
InvariantCulture 使用基于english的比较规则,但没有任何地区差异
1) 那么为什么它说 lasst 等于 laßt 呢? (一个甚至没有英文字符...)
2) 为什么(如果它是英文)hello 不等于héllo?
【问题讨论】:
-
这不是“扁平化为英语”——只是规则基于英语。我认为有关更多详细信息,您可能应该查看 unicode.org,它可能会详细介绍 很多。
-
@JonSkeet Jon,但是
ß不是英文字符,那么它怎么能基于英文呢? -
“基于”!=“完全一样”。
标签: c# string unicode invariantculture