22

我有一个这样的列表,我希望能够在这个列表中搜索来自另一个字符串的子字符串。例子:

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;
}
4

6 回答 6

30

使用 Linq,只需检索第一个结果:

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

要在没有 Linq 的情况下执行此操作(例如,对于早期的 .NET 版本,例如 .NET 2.0),您可以使用List<T>'FindAll方法,在这种情况下,它将返回列表中包含搜索词的所有项目:

var resultList = list.FindAll(delegate(string s) { return s.Contains(srch); });
于 2012-05-07T20:25:22.087 回答
13

要返回所有条目:

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

只有第一个:

string result = list.FirstOrDefault(s => s.Contains(search));
于 2012-05-07T20:25:43.553 回答
1

你写的会导致编译错误

'string.Substring(int)' 的最佳重载方法匹配有一些无效参数

子字符串用于使用字符位置和/或结果字符串的长度来获取字符串的一部分。

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

正如其他人提到的那样,您应该使用Containswhich 告诉您一个字符串是否出现在另一个字符串中。如果你想知道你会使用的实际位置IndexOf

于 2012-05-07T20:34:50.193 回答
1

我必须做的同样的问题。

你需要这个:

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

在哪里:

myListisList<String>具有myString必须包含在任何位置的值

因此,事实上您搜索 myString 是否包含列表中的任何条目。 希望这是你想要的...

于 2013-10-27T08:05:02.990 回答
0

我喜欢使用 indexOf 或 contains

someString.IndexOf("this");
someString.Contains("this");
于 2012-05-07T20:44:33.453 回答
0

并用于CaseSensitive

YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToLower().Contains("some substring"));

或者

YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToUpper().Contains("some substring"));
于 2019-04-16T14:05:35.587 回答