Проверьте, содержит ли строка в списке определенную строку с помощью Linq - PullRequest
19 голосов
/ 27 января 2012

У меня есть List<string>, в котором есть некоторые элементы, подобные этому:

{"Pre Mdd LH", "Post Mdd LH", "Pre Mdd LL", "Post Mdd LL"}

Теперь я хочу выполнить условие, которое проверяет, содержит ли элемент в списке определенную строку.что-то вроде:

IF list contains an item that contains this_string

Для простоты я хочу проверить сразу, если список хотя бы!содержит, например, элемент с Mdd LH.

Я имею в виду что-то вроде:

if(myList.Contains(str => str.Contains("Mdd LH))
{
    //Do stuff
}

Спасибо.

Ответы [ 5 ]

66 голосов
/ 27 января 2012

Я думаю, что вы хотите Any:

if (myList.Any(str => str.Contains("Mdd LH")))

Стоит ознакомиться с стандартными операторами запросов LINQ ; Я бы обычно использовал эти, а не специфичные для реализации методы (такие как List<T>.ConvertAll), если только меня не беспокоила производительность конкретного оператора. (Методы, специфичные для реализации, иногда могут быть более эффективными, зная размер результата и т. Д.)

13 голосов
/ 27 января 2012

Thast должно быть достаточно легко

if( myList.Any( s => s.Contains(stringToCheck))){
  //do your stuff here
}
7 голосов
/ 27 января 2012

LINQ Любой () сделает работу:

bool contains = myList.Any(s => s.Contains(pattern));

Любой (), MSDN :

Определяет, удовлетворяет ли какой-либо элемент последовательности условию

6 голосов
/ 27 января 2012

Попробуйте:

bool matchFound = myList.Any(s => s.Contains("Mdd LH"));

Any() остановит поиск в тот момент, когда найдет совпадение, поэтому весьма эффективно для этой задачи.

3 голосов
/ 27 января 2012

Если вы используете Contains, вы можете получить ложные срабатывания. Предположим, у вас есть строка, содержащая такой текст: «Мои текстовые данные Mdd LH» Используя метод Contains, этот метод вернет true для вызова. Подход заключается в использовании оператора равенства:

bool exists = myStringList.Any(c=>c == "Mdd LH")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...