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。