var strs = new Collection<string>();
bool b = strs.All(str => str == "ABC");
代码创建一个空的字符串集合,然后尝试确定集合中的所有元素是否都是"ABC“。如果运行它,b
将为true。
但是这个集合中甚至没有任何元素,更不用说任何等于"ABC“的元素了。
这是一个bug,还是有一个合理的解释?
发布于 2011-10-25 13:10:28
All
要求谓词对于序列的所有元素都为真。文档中明确说明了这一点。如果您将All
看作是每个元素的谓词结果之间的逻辑"and“,那么这也是唯一有意义的事情。您为空序列得到的true
是"and“操作的标识元素。同样,您从Any
获得的空序列的false
是逻辑"or“的标识。
如果您认为All
是“序列中没有不存在的元素”,这可能更有意义。
发布于 2011-10-25 13:04:33
该方法循环遍历所有元素,直到找到一个不满足条件的元素,或者没有找到失败的元素。如果都没有失败,则返回true。
因此,如果没有元素,则返回true (因为没有失败的元素)
发布于 2011-10-25 13:19:31
将实现放在一边。如果这是真的,真的重要吗?看看你是否有一些遍历枚举并执行一些代码的代码。如果All()为true,那么该代码仍然不会运行,因为enumerable中没有任何元素。
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.
https://stackoverflow.com/questions/7884888
复制相似问题