LINQ не начинается с списка <string> - PullRequest
6 голосов
/ 06 мая 2011

У меня есть список с пятью строками:

abc
def
ghi
jkl
mno

У меня есть другая строка, "pq", и мне нужно знать, если каждая строка в списке не начинается с "pq" - как бы я сделал это с LINQ (.NET 4.0)?

Ответы [ 4 ]

11 голосов
/ 06 мая 2011

Два варианта: Any и All. Какой из них использовать, зависит от того, что вы считаете более читабельным:

var allNonPq = myList.All(x => !x.StartsWith("pq"));
var notAnyPq = !myList.Any(x => x.StartsWith("pq"));

По эффективности они эквивалентны - оба остановятся, как только достигнут элемент, начинающийся с "pq", если он есть.

Если вы часто этим занимаетесь, вы можете даже написать свой собственный метод расширения:

public static bool None<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
    return !source.Any(predicate);
}

в какой момент у вас будет:

var nonePq = myList.None(x => x.StartsWith("pq"));

Если вы считаете, что более удобочитаемым, чем первые два, это, конечно, личное предпочтение:)

0 голосов
/ 06 мая 2011

Это даст результаты, которые являются IEnumerable

var strings = new string[] { ... };
var results = strings.Select(s => s.StartsWith("pq"));
0 голосов
/ 06 мая 2011
bool noPQStart = !myList.Any( x=> x.StartsWith("pq"));
0 голосов
/ 06 мая 2011
var notPq = from s in myList where  !s.StartsWith("pq") select s;

if (notPq.Any()) {
  // At least one item in list doesn't start with pq, possibly do something with each element that doesn't
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...