我们说我有这个代码
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));
如何忽略包含搜索中的字母大小写?
谢谢,
答案 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个字符串参数并比较它们的方法