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")
?看起来它们会做完全相同的事情——实际上是这样吗,还是它们的行为在某种微妙的方面有所不同?
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/