所以我遇到了今天的情况,其中一些生产代码正在失败,因为一个方法完全按照MSDN中的说明执行.因为没有阅读文档而感到羞耻.然而,我仍然在摸索为什么它会以这种方式行事,即使是"按设计",因为这种行为正好与我预期的(和其他已知行为)相反,因此似乎违反了原则最不惊讶的.
该All()方法允许您提供谓词(例如lambda表达式)来测试IQueryable,返回一个布尔值,指示所有集合成员是否与测试匹配.到现在为止还挺好.这就是它变得奇怪的地方. 如果集合为空,All()也会返回true.由于以下原因,这似乎完全落后于我:
Any()方法按预期行为,并且(正确)返回false,因为它没有任何与谓词匹配的成员.所以我的问题是,为什么All()这样做?它解决了什么问题?这是否违反了最不惊讶的原则?
我将此问题标记为.NET 3.5,但该行为也适用于.NET 4.0.
编辑 好的,所以我掌握了这个逻辑方面,正如杰森和你们其他人所做的那样.不可否认,空集合是一种边缘情况.我想我的问题根植于斗争,只是因为某些东西是合乎逻辑的并不意味着如果你没有处于正确的思维框架中,它必然是有道理的.