3

可能重复:
通常最好使用哪个 - StringComparison.OrdinalIgnoreCase 或 StringComparison.InvariantCultureIgnoreCase?

当使用 String.Equals(string a, string b, StringComparison comparisonType) 并且不关心 'a' 和 'b' 的情况时,使用什么是正确的 StringComparison?换句话说,StringComparison.CurrentCultureIgnoreCase、StringComparison.InvariantCultureIgnoreCase 和 StringComparison.OrdinalIgnoreCase 有什么区别,它们各自会如何影响 String.Equals 的使用?

4

1 回答 1

3

问题是小写字母的大写版本在所有语言中都不相同。例如,“u”的大写字母在 en-us 中是“U”,但在其他文化中可能是其他内容。

试试这个,例如:

        CultureInfo english = new CultureInfo("en-US", false);
        CultureInfo turkish = new CultureInfo("tr-TR", false);

        foreach (String i in new String[] { "a", "e", "i", "o", "u" })
        {
            String iEng = i.ToUpper(english);
            String iTur = i.ToUpper(turkish);
            Console.Write(i); 
            Console.WriteLine(iEng == iTur ? " Equal" : " Not equal");
        }

        Console.ReadLine();

因此,如果您在当前线程的文化中输入了包含此类字母的字符串,则使用不变文化可能会产生错误的结果。所以我会使用 CurrentCultureIgnoreCase,如果您确定比较的字符串是在当前文化中输入的并且也应该以这种方式进行比较。

于 2009-06-11T20:31:17.023 回答