Enumerable.Where(谓词)vs. Enumerable.All(谓词)

本文关键字:Enumerable 谓词 All Where vs | 更新日期: 2023-09-27 17:53:48

items.Where(i => i.Foo == "bar")

items.All(i => i.Foo == "bar")

?看起来它们会做完全相同的事情——实际上是这样吗,还是它们的行为在某种微妙的方面有所不同?

Enumerable.Where(谓词)vs. Enumerable.All(谓词)

Where<T>返回IEnumerable<T>并作为集合的过滤器:

可点数的。其中Method

根据谓词筛选一系列值。

在您的示例中,它返回Foo属性等于"bar"的所有元素。


All<T>返回bool,只检查集合中的所有元素是否满足给定的谓词:

可点数的。所有方法

判断一个序列的所有元素是否满足一个条件。

在您的例子中,当所有元素的Foo属性等于"bar"时,它返回true,否则返回false

items.Where -根据条件进行筛选,并返回经过筛选的对象的集合。

items.All -如果集合中的所有对象都满足条件,则返回true,否则返回false

看起来不完全一样,是吗?

可枚举。All返回一个bool值,该值指示所讨论的所有元素是否满足谓词所表示的条件。

可点数的。其中返回一个泛型IEnumerable集合,其中仅包含满足上述条件的项。

我看不出这些LINQ函数返回的结果有什么共同之处——一个是bool类型,另一个是collection类型。是的,它们在语法上是相似的,但是在完全不同的情况下使用。

一个简单的例子:假设你有一个整型列表:

List sampleList = new List {3,4,6,9};

如果你运行

sampleList.All(v => v % 3 == 0);

你会得到false,因为4不满足条件。

如果你运行

sampleList。(v => v % 3 == 0);

您将收到一个IEnumerable,其中包含满足条件的值:3,6和9/