在c#中比较两个字符串是否相等时,InvariantCulture和Ordinal比较有什么区别?
使用一组“标准”字符顺序(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)。