当在c#中比较两个字符串是否相等时,InvariantCulture和顺序比较有什么不同?
发布于 2009-01-29 18:44:33
InvariantCulture
使用一组“标准”字符排序(a,b,c,...等等)。这与某些特定的语言环境形成对比,后者可能会以不同的顺序对字符进行排序('a-with-acute‘可能在'a’之前,或者在‘a’之后是,这取决于语言环境,等等)。
序数
另一方面,只查看表示字符的原始字节的值。
在http://msdn.microsoft.com/en-us/library/e6883c06.aspx上有一个很好的示例,它显示了各种StringComparison值的结果。最后,它显示(摘录):
StringComparison.InvariantCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)
StringComparison.Ordinal:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)您可以看到,其中InvariantCulture收益率(U+0069,U+0049,U+00131),顺序收益率(U+0049,U+0069,U+00131)。
发布于 2013-11-20 08:40:50
例如,它确实很重要--有一种叫做字符扩展的东西
var s1 = "Strasse";
var s2 = "Straße";
s1.Equals(s2, StringComparison.Ordinal); //false
s1.Equals(s2, StringComparison.InvariantCulture); //true使用InvariantCulture时,«字符将扩展为ss。
发布于 2014-02-25 18:48:40
指向Best Practices for Using Strings in the .NET Framework
StringComparison.Ordinal或StringComparison.OrdinalIgnoreCase用于比较,作为与区域性无关的字符串匹配的安全默认值。当比较在语言上不相关(例如,符号)时,StringComparison.Ordinal或StringComparison.OrdinalIgnoreCase的比较,以便更好地对非语言StringComparison.Ordinal或D12值进行比较,而不是基于CultureInfo.InvariantCulture的字符串操作。最后:
在大多数情况下,
StringComparison.InvariantCulture 的字符串操作。为数不多的例外之一是当你持久化语言上有意义但文化上不可知的数据时。https://stackoverflow.com/questions/492799
复制相似问题