一尘不染

为什么Enumerable.All对于空序列返回true?

c#

var strs = new Collection();
bool b = strs.All(str => str == “ABC”);

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

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

这是错误,还是有合理的解释?


阅读 358

收藏
2020-05-19

共1个答案

一尘不染

当然不是错误。它的行为与记录的完全相同:

如果源序列中的每个元素都通过指定谓词中的测试, 或者序列为空则为 true;否则为true 。否则为假。

现在您可以争论它是否 应该以 这种方式工作(对我来说似乎很好;序列中的每个元素都符合谓词),但是在询问是否存在错误之前 首先要检查的
是文档。(这是检查方法以预期之外的其他方式进行操作时的第一件事。)

2020-05-19