不区分大小写的StringComparisons之间的区别?

时间:2009-06-11 20:15:29

标签: c# case-insensitive string-comparison

  

可能重复:
  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的使用?

1 个答案:

答案 0 :(得分: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,如果您确定比较的字符串是在当前文化中输入的,那么也应该这样比较。