Найти подстроку в списке строк

У меня есть список, подобный этому, и я хочу, чтобы иметь возможность искать в этом списке подстроку, поступающую из другой строки. Пример:

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

Ответы

Ответ 1

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

Ответ 2

Чтобы вернуть все th записи:

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

Только первый:

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

Ответ 3

То, что вы написали, вызывает ошибку компиляции

Наилучшее перегруженное соответствие метода для 'string.Substring(int)' имеет некоторые недопустимые аргументы

Подстрока используется для получения части строки с использованием положения символа и/или длины результирующей строки.

например srch.Substring(1, 3) возвращает строку "her"

Как уже упоминалось, вы должны использовать Contains, который говорит вам, что одна строка встречается внутри другой. Если вы хотите узнать фактическое положение, которое вы использовали бы IndexOf

Ответ 4

Мне нравится использовать indexOf или содержит

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

Ответ 5

та же проблема, которую я должен был сделать.

Вам нужно следующее:

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

Где:

myList есть List<String> имеет значения что myString должен содержать в любой позиции

Так де-факто вы ищете, если myString содержит какие-либо записи из списка. Надеюсь, это то, что вы хотели...

Ответ 6

И для использования с CaseSensitive:

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

ИЛИ ЖЕ

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