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

让我们说我有这个代码

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)); 

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

谢谢,

最好的select是使用序号不区分大小写的比较,但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)); 

使用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)); 

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

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

最佳解决scheme是在执行比较时忽略该情况

 List<string> searchResults = sl.FindAll(s => s.IndexOf(seachKeyword, System.StringComparison.OrdinalIgnoreCase) >= 0); 
 StringComparer.CurrentCultureIgnoreCase is a better approach instead of using indexOf. 

你可以应用这个小技巧。
将所有string更改为相同的大小写大写或小写

List searchResults = sl.FindAll(s => s.ToUpper(). Contains( seachKeyword.ToUpper() ));

对于那些在searchLIST时遇到问题的人,我find了一个解决scheme。

在这个例子中,我正在searchJagged List,只抓取具有与参数匹配的第一个string的列表。

 List<List<string>> TEMPList = new List<List<string>>(); TEMPList = JaggedList.FindAll(str => str[0].ToLower().Contains(arg.ToLower())); DoSomething(TEMPList); 

FindAll枚举整个列表。

find第一个例子后,更好的方法是打破。

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

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

 private List<string> serchForElement(string searchText, list<string> ListOfitems) { searchText = searchText.ToLower(); List<string> Newlist = (from items in ListOfitems where items.ToLower().Contains(searchText.ToLower()) select items).ToList<string>(); 

返回新的列表; }

一个可能的(可能不是最好的),是你小写所有的string放入sl。 然后你小写searchKeyword。

另一种解决方法是编写另一个小写string参数的方法,并将其进行比较