有什么区别:
items.Where(i => i.Foo == "bar")
和
items.All(i => i.Foo == "bar")
?看起来他们做的事情完全相同 - 实际情况如何,或者他们是否以某种微妙的方式表现出不同的行为?
答案 0 :(得分:8)
Where<T>
会返回IEnumerable<T>
并充当您收藏的过滤器:
Enumerable.Where方法
根据谓词过滤一系列值。
在您的情况下,它会返回Foo
属性等于"bar"
的所有元素。
All<T>
返回bool
,只检查集合中的所有元素是否满足给定的谓词:
可枚举。所有方法
确定序列的所有元素是否满足条件。
在您的情况下,当所有元素的true
属性等于Foo
时,它会返回"bar"
,否则为false
。
答案 1 :(得分:5)
items.Where
- 根据条件过滤并返回过滤对象的集合。
items.All
- 如果集合中的所有对象都满足条件,则返回true
,否则返回false
。
看起来不一样,是吗?
答案 2 :(得分:4)
Enumerable.All 会返回一个bool值,指示所有相关元素是否满足谓词所表达的条件。
Enumerable.Where 返回一个通用IEnumerable集合,该集合仅包含满足上述条件的项目。
我没有看到从这些LINQ函数返回的结果之间有任何共同点 - 一个是bool,另一个是集合。是的,它们的语法相似,但在完全不同的情况下使用。
一个简单的例子: 假设你有一个int列表:
列出sampleList = new List {3,4,6,9};
如果你跑
sampleList.All(v => v % 3 == 0);
你会得到假,因为4不满足条件。
如果你跑
sampleList.Where(v =&gt; v%3 == 0);
您将收到一个 IEnumerable ,其中包含满足条件的值:3,6和9 /