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

时间:2010-06-24 06:49:33

标签: 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));

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

谢谢,

11 个答案:

答案 0 :(得分:82)

使用Linq,这为.Compare

添加了一个新方法
using System.Linq;
using System.Collections.Generic;

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

所以大概是

using System.Linq;
...

List<string> searchResults = sl.FindAll(s => s.Contains(seachKeyword, StringComparer.CurrentCultureIgnoreCase));  

答案 1 :(得分:64)

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

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

sl.FindAll(s => s.IndexOf(searchKeyword, StringComparison.OrdinalIgnoreCase) >= 0);

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

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

所以你可以使用:

sl.FindAll(s => s.Contains(searchKeyword, StringComparison.OrdinalIgnoreCase));

答案 2 :(得分:22)

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

if (myList.Contains(keyword, StringComparer.OrdinalIgnoreCase))
{
    Console.WriteLine("Keyword Exists");
}

答案 3 :(得分:6)

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

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

答案 4 :(得分:6)

StringComparer.CurrentCultureIgnoreCase is a better approach instead of using indexOf.

答案 5 :(得分:1)

下面的方法将搜索您需要的关键字,并将所有搜索到的项目插入新列表,然后返回新列表。

dataGridView1.DataSource

返回新名单;     }

答案 6 :(得分:0)

你可以应用这个小技巧。
将所有字符串更改为相同案例大写或小写

列出searchResults = sl.FindAll(s =&gt; s.ToUpper() .Contains( seachKeyword.ToUpper()));

答案 7 :(得分:0)

对于那些在搜索列表LIST时遇到问题的人,我找到了解决方案。

在这个例子中,我正在搜索Jagged List并且仅搜索具有与参数匹配的第一个字符串的列表。

List<List<string>> TEMPList = new List<List<string>>();

TEMPList = JaggedList.FindAll(str => str[0].ToLower().Contains(arg.ToLower()));

DoSomething(TEMPList);

答案 8 :(得分:0)

FindAll会对整个列表进行枚举。

更好的方法是在找到第一个实例后中断。

bool found = list.FirstOrDefault(x =&gt; String.Equals(x,searchKeyWord,Stringcomparison.OrdinalIgnoreCase)!= null;

答案 9 :(得分:0)

简单地说,您可以使用LINQ查询,如下所示,

String str = "StackOverflow";
int IsExist = Mylist.Where( a => a.item.toLower() == str.toLower()).Count()
if(IsExist > 0)
{
     //Found
}

答案 10 :(得分:-1)

其中一个可能(可能不是最好的),是你将所有字符串放入sl的小写字母。然后你小写searchKeyword。

另一个解决方案是编写另一个小写2个字符串参数并比较它们的方法