不变文化与序数字符串比较的区别
当比较c#中的两个字符串是否相等时,InvariantCulture和Ordinal比较有什么区别?
InvariantCulture的
使用“标准”字符排序集(a,b,c,...等)。 这与一些特定的区域设置形成对比,这些区域设置可以按不同的顺序对字符进行排序('a-with-acute'可以在'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),Ordinal产量(U + 0049,U + 0069,U + 00131)。
例如,它确实很重要 - 有一种叫做人物扩展的东西
var s1 = "Strasse";
var s2 = "Straße";
s1.Equals(s2, StringComparison.Ordinal); //false
s1.Equals(s2, StringComparison.InvariantCulture); //true
InvariantCulture
将ß字符扩展为ss。
指出在.NET Framework中使用字符串的最佳实践:
StringComparison.Ordinal
或StringComparison.OrdinalIgnoreCase
进行比较,作为文化无关字符串匹配的安全默认值。 StringComparison.Ordinal
或StringComparison.OrdinalIgnoreCase
进行比较以获得更好的性能。 StringComparison.Ordinal
或StringComparison.OrdinalIgnoreCase
值而不是基于CultureInfo.InvariantCulture
的字符串操作。 最后:
StringComparison.InvariantCulture
字符串操作 。 少数例外之一是,当你坚持语言有意义但文化不可知的数据时。 上一篇: Difference between InvariantCulture and Ordinal string comparison