2012-05-07 103 views
17

我有一個像這樣的列表,我希望能夠在此列表中搜索來自另一個字符串的子字符串。例如:查找字符串列表中的子字符串

List<string> list = new List<string>(); 
string srch = "There"; 
list.Add("1234 - Hello"); 
list.Add("4234 - There"); 
list.Add("2342 - World"); 

我想我的列表中搜索"There"和返回"4234 - There"。我已經試過:

var mySearch = list.FindAll(S => s.substring(srch)); 
foreach(var temp in mySearch) 
{ 
    string result = temp; 
} 

回答

23

使用LINQ,只是檢索的第一個結果:

string result = list.FirstOrDefault(s => s.Contains(srch)); 

要做到這一點W/O的LINQ(如早期的.NET版本,如.NET 2.0),您可以使用的List<T>FindAll方法,在這種情況下將返回列表中包含搜索詞的所有項目:

var resultList = list.FindAll(delegate(string s) { return s.Contains(srch); }); 
+0

嗨,感謝您的快速回答,我得到一個編譯錯誤:FirstOrDefault,而不是擴展方法。我需要添加某種類型的列表庫嗎? – user1380621

+0

如何添加Linq?對不起新問題。 – user1380621

+2

你需要添加'使用System.Linq'到你的文件 - 我假設你使用的是.NET 4.0? – BrokenGlass

9

要返回所有條目日:

IEnumerable<string> result = list.Where(s => s.Contains(search)); 

只有第一個:

string result = list.FirstOrDefault(s => s.Contains(search)); 
1

什麼你寫會導致編譯錯誤

The best overloaded method match for 'string.Substring(int)' has some invalid arguments

子串用於使用字符位置和/或長度來獲得字符串的一部分結果字符串。

例如 srch.Substring(1, 3)返回字符串「她」

正如其他都提到你應該使用Contains如果在另一個出現一個字符串,它告訴你。如果你想知道實際的位置,你會使用IndexOf

0

我喜歡用的indexOf或含有

someString.IndexOf("this"); 
someString.Contains("this"); 
0

同樣的問題,我不得不這樣做。

你需要這樣的:

myList.Where(listStrinEntry => myString.IndexOf(listStringEntry) != -1) 

其中:

myListList<String>有 是myString必須包含在任何位置

那麼事實上你搜索如果myString的包含任何值列表中的條目。 希望這是你想要的...

相關問題