StringComparison.InvariantCulture Clarification?
本文关键字:Clarification InvariantCulture StringComparison | 更新日期: 2023-09-27 18:25:32
根据MSDN:StringComparison.InvariantCulture
:
指定字符串的某些重载要使用的区域性、大小写和排序规则。比较和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
使用基于英语的比较规则,但没有任何区域差异
1) 为什么说lasst
等于laßt
?(一个人甚至没有英文字符…)
2) 为什么hello
不等于héllo
?
通过C#从CLR一书中获得的相关片段
注意当Compare方法不执行顺序比较时,它执行字符扩展。字符扩展是指无论文化如何,角色都会扩展为多个角色。在里面在上述情况下,德语Eszet字符"ß"总是扩展为'ss.'类似地,"Æ"连字字符总是扩展为"啊。"因此,在代码示例中,对Compare的第二次调用将始终返回0,而不管我实际传入的是哪种文化。
字符串"héllo"不会在内部通过字符扩展进行转换,因此不被认为等于"hello"。