LINQ不以List <string> </string>开头

时间:2011-05-05 20:35:06

标签: linq string

我有一个List&lt; string&gt;其中有五个字符串:

abc
def
ghi
jkl
mno

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

4 个答案:

答案 0 :(得分:11)

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

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"));

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

答案 1 :(得分:0)

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
}

答案 2 :(得分:0)

bool noPQStart = !myList.Any( x=> x.StartsWith("pq"));

答案 3 :(得分:0)

这将产生IEnumerable&lt; bool&gt;

的结果
var strings = new string[] { ... };
var results = strings.Select(s => s.StartsWith("pq"));