当使用String.Equals(字符串a,字符串b,StringComparison comparisonType)而不关心'a'和'b'的情况时,使用什么是正确的StringComparison? 换句话说,StringComparison.CurrentCultureIgnoreCase,StringComparison.InvariantCultureIgnoreCase和StringComparison.OrdinalIgnoreCase之间的区别是什么,以及每个如何影响String.Equals的使用?
答案 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,如果您确定比较的字符串是在当前文化中输入的,那么也应该这样比较。