我有一个List <string>,里面有五个字符串:
abc
def
ghi
jkl
mno
Run Code Online (Sandbox Code Playgroud)
我有另一个字符串,"pq",我需要知道列表中的每个字符串是否都不以"pq"开头 - 我将如何使用LINQ(.NET 4.0)?
Jon*_*eet 11
两个选项:Any和All.你应该使用哪一个取决于你发现的更具可读性:
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)
您是否发现比前两个更具可读性是个人偏好,当然:)