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

问题描述:

可能重复:
Which is generally best to use — StringComparison.OrdinalIgnoreCase or StringComparison.InvariantCultureIgnoreCase?不区分大小写的StringComparisons之间的区别?

当使用String.Equals(字符串,字符串B,StringComparison comparisonType)和不关心 'a' 和 'B' 的情况下,什么是正确的StringComparison使用? 换句话说,StringComparison.CurrentCultureIgnoreCase,StringComparison.InvariantCultureIgnoreCase和StringComparison.OrdinalIgnoreCase有什么区别,以及每个如何影响String.Equals的使用?

+0

哪一个是“正确的”取决于你将字符串比较的用途。那么,你想要做什么?为什么你比较两个字符串不区分大小写?琴弦从哪里来,结果在哪里? – 2009-06-11 20:42:17

+0

看起来类似:http://stackoverflow.com/questions/72696/which-is-generally-best-to-use-stringcomparison-ordinalignorecase-or-stringcom – Greg 2009-06-11 20:43:01

问题是大写字母的小写字母在所有语言中都不相同。例如,在我们中,“u”的大写字母是“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,如果你确定比较的字符串是在当前的文化中输入的并且应该以这种方式进行比较。