Possible Duplicate:
Which is generally best to use — StringComparison.OrdinalIgnoreCase or StringComparison.InvariantCultureIgnoreCase?




当使用String.Equals(字符串a,字符串b,StringComparison comparisonType)并且不关心'a'和'b'的情况时,应使用什么合适的StringComparison?
换句话说,StringComparison.CurrentCultureIgnoreCase,StringComparison.InvariantCultureIgnoreCase和StringComparison.OrdinalIgnoreCase之间有什么区别,并且每一个都会如何影响String.Equals的使用?

最佳答案

关键是小写字母的大写版本并非在所有语言中都相同。例如,“ 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。

09-26 06:19