字符串大小写敏感性

3

4
请问是否有C#中不区分大小写的等于运算符? - Jed Smith
5个回答

10

有两种方法:

您可以使用 .ToLower() 并进行字符串相等性比较,或者您可以使用此方法:

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

编辑:为了平息那些给我踩的人,如果你的数据具有文化意义(例如比较斯堪的纳维亚语单词且当前区域设置正确),那么这个操作是有用的。如果这个数据与文化无关,并且你不关心区域设置(不好的想法,特别是因为.NET 适用于 Unicode),那么你可以这样做:

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

1
-1 我认为你的回答不够完整。不过,我会考虑你提到的地区设置方面的内容。 - Preet Sangha

3
你应该使用这里的建议 MSDN:"字符串使用建议"
  • DO:对于与文化无关的字符串匹配,请使用StringComparison.Ordinal或OrdinalIgnoreCase作为安全默认值。
  • DO:使用StringComparison.Ordinal和OrdinalIgnoreCase比较可以提高速度。
  • DO:在显示输出给用户时,使用基于StringComparison.CurrentCulture的字符串操作。
  • DO:当比较与语言无关时(例如符号),将当前使用不变文化的字符串操作切换为使用非语言StringComparison.Ordinal或StringComparison.OrdinalIgnoreCase。
  • DO:在规范化字符串进行比较时,使用ToUpperInvariant而不是ToLowerInvariant。
  • DON'T:使用没有明确或隐含指定字符串比较机制的字符串操作重载。
  • DON'T:除了持久化语言相关但与文化无关的数据之外,在大多数情况下不要使用基于StringComparison.InvariantCulture的字符串操作。
我必须承认,它们对我来说是一个启示,特别是最后一个。

OP没有明确指定这是否是文化无关的。特别是斯堪的纳维亚地区对于哪些字符是大写字母有独特的规定。不过还是感谢你的点踩。 - Jed Smith

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
}

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

:D


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接