字符串大小写敏感度

时间:2009-09-07 00:58:54

标签: c#

  

可能重复:
  Is there a C# case insensitive equals operator?

string string1 =“aBc”

string string2 =“AbC”

如何检查string1是否等于string2并使其返回true,无论区分大小写。

5 个答案:

答案 0 :(得分:10)

两种方法:

你可以.ToLower()并进行字符串相等,或者你可以使用它:

string.Equals(string1, string2, StringComparison.CurrentCultureIgnoreCase)

编辑:为了安抚downvoters,如果您的数据具有重要文化意义(例如,您正在比较斯堪的纳维亚语单词并且您的当前语言环境设置正确),则此操作非常有用。如果这些数据与文化无关,并且您不关心语言环境(错误的想法,特别是因为.NET适用于Unicode),您可以这样做:

string.Equals(string1, string2, StringComparison.OrdinalIgnoreCase)

答案 1 :(得分:3)

您应该使用MSDN: "Recommendations for String Use" 中的建议:

  • DO:使用StringComparison.Ordinal或OrdinalIgnoreCase进行比较,作为与文化无关的字符串匹配的安全默认值
  • DO:使用StringComparison.Ordinal和OrdinalIgnoreCase进行比较以提高速度。
  • DO:在向用户显示输出时使用基于StringComparison.CurrentCulture的字符串操作。
  • DO:当比较在语言上无关时(例如符号),切换基于不变文化的字符串操作的当前使用,以使用非语言的StringComparison.Ordinal或StringComparison.OrdinalIgnoreCase。
  • DO:在规范化字符串以进行比较时,使用ToUpperInvariant而不是ToLowerInvariant。
  • 请勿:对未明确或隐式指定字符串比较机制的字符串操作使用重载。
  • 请勿:在大多数情况下使用基于StringComparison.InvariantCulture的字符串操作; 少数例外情况之一是保留语言上有意义但与文化无关的数据。

我必须承认他们是我的眼睛。特别是最后一个。

答案 2 :(得分:2)

您还可以使用string.Compare,添加第三个参数,即 ignoreCase

if (string.Compare(string1, string2, true) == 0) 
{ 
   // string are equal
}

您还可以使用CompareInfo类:

if (CultureInfo.CurrentCulture.CompareInfo.Compare(string1, string2, 
    CompareOptions.IgnoreCase) == 0)
{
   // string are equal
}

答案 3 :(得分:1)

string.Equals(string1, string2, StringComparison.CurrentCultureIgnoreCase);

:d

答案 4 :(得分:1)

string.Equals("aBc", "AbC", StringComparison.CurrentCultureIgnoreCase)