关于c#:String Case Sensitivity


String Case Sensitivity

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is there a C# case insensitive equals operator?

string string1="ABC"

string string2="ABC"

如何检查string1是否等于string2并使其返回true,而不管大小写敏感度如何。


两种方法:

您可以使用.ToLower()和字符串相等,也可以使用:

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

编辑:为了安抚落选者,如果您的数据具有文化意义(即,您正在比较斯堪的纳维亚语单词,并且您当前的语言环境设置正确),则此操作非常有用。如果此数据在文化上不可知,并且您不关心区域设置(坏主意,特别是因为.NET使用Unicode,所以您可以这样做:

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


您应该使用这里的建议msdn:"字符串使用建议":

  • do:使用StringComparison.Ordinal或OrdinalIgnoreCase进行比较,作为区域性不可知字符串匹配的安全默认值。
  • 做:使用StringComparison.Ordinal和OrdinalIgnoreCase比较以提高速度。
  • do:向用户显示输出时,使用基于StringComparison.CurrentCulture的字符串操作。
  • do:将基于不变区域性的字符串操作的当前使用切换为使用非语言的StringComparison.Ordinal或StringComparison.OrdinalIgnoreCase(例如符号比较)。
  • do:在规范化字符串进行比较时,使用toUpperInvariant而不是toLowerInvariant。
  • 不要:对没有显式或隐式指定字符串比较机制的字符串操作使用重载。
  • 不要:在大多数情况下使用StringComparison.InvariantCulture-Based字符串操作;少数例外情况之一是持久化有语言意义但文化上不可知的数据。

我必须承认他们让我大开眼界。尤其是最后一个。


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

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

您还可以使用CompareInfo类:

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

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

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

D