首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么空序列的Enumerable.All返回true?

为什么空序列的Enumerable.All返回true?
EN

Stack Overflow用户
提问于 2011-10-25 13:00:18
回答 3查看 39.3K关注 0票数 124
代码语言:javascript
复制
var strs = new Collection<string>();
bool b = strs.All(str => str == "ABC");

代码创建一个空的字符串集合,然后尝试确定集合中的所有元素是否都是"ABC“。如果运行它,b将为true。

但是这个集合中甚至没有任何元素,更不用说任何等于"ABC“的元素了。

这是一个bug,还是有一个合理的解释?

EN

回答 3

Stack Overflow用户

发布于 2011-10-25 13:10:28

All要求谓词对于序列的所有元素都为真。文档中明确说明了这一点。如果您将All看作是每个元素的谓词结果之间的逻辑"and“,那么这也是唯一有意义的事情。您为空序列得到的true是"and“操作的标识元素。同样,您从Any获得的空序列的false是逻辑"or“的标识。

如果您认为All是“序列中没有不存在的元素”,这可能更有意义。

票数 13
EN

Stack Overflow用户

发布于 2011-10-25 13:04:33

该方法循环遍历所有元素,直到找到一个不满足条件的元素,或者没有找到失败的元素。如果都没有失败,则返回true。

因此,如果没有元素,则返回true (因为没有失败的元素)

票数 3
EN

Stack Overflow用户

发布于 2011-10-25 13:19:31

将实现放在一边。如果这是真的,真的重要吗?看看你是否有一些遍历枚举并执行一些代码的代码。如果All()为true,那么该代码仍然不会运行,因为enumerable中没有任何元素。

代码语言:javascript
复制
var hungryDogs = Enumerable.Empty<Dog>();
bool allAreHungry = hungryDogs.All(d=>d.Hungry);    
if (allAreHungry)
    foreach (Dog dog in hungryDogs)
         dog.Feed(biscuits); <--- this line will not run anyway.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7884888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档