根据MSDN:StringComparison.InvariantCulture:
指定特定重载的和String.Compare方法所使用的区域性、大小写和String.Compare排序规则。
嗯,在我的样本中我没有做任何排序,并且仍然不明白为什么它会产生它产生的结果:
/*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使用基于英语的比较规则,但没有任何区域变化。
( 1)为什么它说lasst等于laßt?(一个人甚至没有英文字符.)
2)为什么hello不等于héllo?
发布于 2013-07-30 11:06:11
通过C#从“CLR”一书中获取相关片段
Note当比较方法没有执行序号比较时,它执行字符展开。字符扩展是指将字符展开为多个字符,而不考虑区域性。在上述情况下,德语Eszet字符‘Eszet’总是扩展为‘ss.s’。类似地,“埃塞”系结字符总是扩展为“AE.‘”。因此,在代码示例中,要比较的第二个调用总是返回0,而不管我实际传递给它的是哪种区域性。
字符串"héllo“不会在内部通过字符展开进行转换,因此不被认为等于"hello”。
https://stackoverflow.com/questions/17945119
复制相似问题