如何使String.Contains不区分大小写?

78

如何让下面的代码不区分大小写?

myString1.Contains("AbC")

1
或者是 String.Contains 的 MSDN 文章副本,其中建议“另请参阅:IndexOf”... - Alexei Levenkov
好的,这个问题并不完全重复,如果它要求使用VB.Net回答,因为VB.Net具有C#没有的功能,例如可以在此处使用的LIKE运算符。 - sloth
他标记了两种语言,所以可能他不在意解决方案是哪一个,因此重复的完全回答了这个问题。无论如何,如果他只编辑了vb.net的问题,那么它将自动进入重新打开队列。 - SysDragon
3个回答

146
你可以创建自己的扩展方法来实现这个功能:

你可以创建自己的扩展方法来实现这个功能:

public static bool Contains(this string source, string toCheck, StringComparison comp)
  {
    return source != null && toCheck != null && source.IndexOf(toCheck, comp) >= 0;
  }

然后调用:

 mystring.Contains(myStringToCheck, StringComparison.OrdinalIgnoreCase);

2
通过使用扩展方法对其进行包装,这可能是最好的答案。 - Moo-Juice
7
是的,因为它很熟悉 :) https://dev59.com/D3RB5IYBdhLWcg3w-8Lo#444818 - Soner Gönül
5
我建议将函数命名为除了与框架中的某些内容精确匹配之外的其他名称,例如你的缩写 + 包含。对于很多东西我都采用这种方法。我的缩写是PS,所以我有psContains、psStartsWith、psEndsWith等等。我认为应该起不同的名字,这样你就可以仅仅通过阅读代码就知道它要做什么了。此外,如果签名兼容,编译器可能不会喜欢它。如果它们足够兼容,编译也无法帮助您找出是否使用了扩展。扩展是Dotnet中真正的宝藏。如果使用得当 :) - Programmer Paul
我希望我能给你不止一个赞! - pjdupreez
你应该检查字符串和toCheck参数是否为null。如果其中任何一个为null,则应返回false。否则将会抛出异常。 - ashlar64

51

你可以使用:

if (myString1.IndexOf("AbC", StringComparison.OrdinalIgnoreCase) >=0) {
    //...
}

这适用于任何 .NET 版本。


3
你的答案中有两个拼写错误,除此之外还不错;-) 它应该是(显然)StringComparison.OrdinalIgnoreCase - andreas

12
bool b = list.Contains("Hello", StringComparer.CurrentCultureIgnoreCase);

[编辑]扩展代码:

public static bool Contains(this string source, string cont
                                                    , StringComparison compare)
{
    return source.IndexOf(cont, compare) >= 0;
}

这可能行得通 :)


13
这种方法在标准的 C# 中不存在。 - Tobia Zambon
1
这就是问题的原因...谢谢@trippino - iGanja
@trippino用扩展代码编辑了我的答案。 - Kamil Budziewski
1
感谢上帝给出这个答案。 - ilans

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