如何忽略List <string>中的区分大小写

Mar*_*ark 64 c#

我们说我有这个代码

string seachKeyword = "";
List<string> sl = new List<string>();
sl.Add("store");
sl.Add("State");
sl.Add("STAMP");
sl.Add("Crawl");
sl.Add("Crow");
List<string> searchResults = sl.FindAll(s => s.Contains(seachKeyword));
Run Code Online (Sandbox Code Playgroud)

如何忽略包含搜索中的字母大小写?

谢谢,

Ces*_*ere 83

使用Linq,这为.Compare添加了一个新方法

using System.Linq;
using System.Collections.Generic;

List<string> MyList = new List<string>();
MyList.Add(...)
if (MyList.Contains(TestString, StringComparer.CurrentCultureIgnoreCase)) {
    //found
} 
Run Code Online (Sandbox Code Playgroud)

所以大概是这样的

using System.Linq;
...

List<string> searchResults = sl.FindAll(s => s.Contains(seachKeyword, StringComparer.CurrentCultureIgnoreCase));  
Run Code Online (Sandbox Code Playgroud)

  • 啊哈!我错误地使用StringComparison!谢谢! (2认同)

Iga*_*nik 65

最好的选择是使用序数不区分大小写的比较,但是该Contains方法不支持它.

您可以使用以下方法执行此操作:

sl.FindAll(s => s.IndexOf(searchKeyword, StringComparison.OrdinalIgnoreCase) >= 0);
Run Code Online (Sandbox Code Playgroud)

最好将它包装在扩展方法中,例如:

public static bool Contains(this string target, string value, StringComparison comparison)
{
    return target.IndexOf(value, comparison) >= 0;
}
Run Code Online (Sandbox Code Playgroud)

所以你可以使用:

sl.FindAll(s => s.Contains(searchKeyword, StringComparison.OrdinalIgnoreCase));
Run Code Online (Sandbox Code Playgroud)

  • 这是不是意味着,给定的OP的问题列表,即`sl.FindAll(S => s.Contains( "STAT",StringComparison.OrdinalIgnoreCase));`将返回TRUE;?虽然可以想象是正确的,但我更喜欢"List <string>"上的Contains,如果两个字符串的长度相等则只返回true,无论情况如何,如果`List <string>`包含字符串,则返回true包含搜索参数.所以...`return target.IndexOf(value,comparison)> = 0 && target.Length == value.Length;` (2认同)

Jer*_*yal 22

您可以Contains通过提供不区分大小写的字符串相等比较器来使用,如下所示:

if (myList.Contains(keyword, StringComparer.OrdinalIgnoreCase))
{
    Console.WriteLine("Keyword Exists");
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您需要包含linq"using System.Linq;" (2认同)

Pet*_*rov 6

最佳解决方案是在执行比较时忽略这种情况

List<string> searchResults = sl.FindAll(s => s.IndexOf(seachKeyword, System.StringComparison.OrdinalIgnoreCase) >= 0);
Run Code Online (Sandbox Code Playgroud)


Kun*_*oel 6

StringComparer.CurrentCultureIgnoreCase is a better approach instead of using indexOf.
Run Code Online (Sandbox Code Playgroud)