LINQ不以List <string>开头

Sno*_*owy 6 linq string

我有一个List <string>,里面有五个字符串:

abc
def
ghi
jkl
mno
Run Code Online (Sandbox Code Playgroud)

我有另一个字符串,"pq",我需要知道列表中的每个字符串是否都不以"pq"开头 - 我将如何使用LINQ(.NET 4.0)?

Jon*_*eet 11

两个选项:AnyAll.你应该使用哪一个取决于你发现的更具可读性:

var allNonPq = myList.All(x => !x.StartsWith("pq"));
var notAnyPq = !myList.Any(x => x.StartsWith("pq"));
Run Code Online (Sandbox Code Playgroud)

这些效率实际上是相同的 - 一旦它们到达以"pq"开头的元素(如果有的话),它们都会停止.

如果你发现自己做了很多,你甚至可以编写自己的扩展方法:

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

那时你有:

var nonePq = myList.None(x => x.StartsWith("pq"));
Run Code Online (Sandbox Code Playgroud)

您是否发现比前两个更具可读性是个人偏好,当然:)