【发布时间】:2013-10-12 19:11:28
【问题描述】:
我遇到过一些情况,我觉得我缺少一种 LINQ 扩展方法,该方法可以有效地检查集合中指定谓词是否不匹配。有Any 和All,但如果我使用以下代码:
if (Objects.All(u => u.Distance <= 0))
如果集合中的所有对象都在 0 码或以下,则返回 true。
if (Objects.Any(u => u.Distance <= 0))
如果集合中至少有一个对象距离我不超过 0 码,则返回 true。
到目前为止一切都很好,这两种方法都很有意义,它们的语法也很有意义。现在,如果我想检查是否没有距离为 0 或更小的对象,我必须将 All 方法中的谓词反转为 >= 0 而不是 <= 0 或调用 !All(),在某些情况下case 会导致代码的可读性很差。
是否没有有效的方法Collection.None(u => u.Distance <= 0) 来检查集合中是否没有 0 码或更少码外的对象?它是语法糖而不是实际问题,但我只是觉得它缺失了。
【问题讨论】:
-
扩展方法是你的朋友。如果您需要 Collection.None,请定义一个...
-
@DavidArno 已经有一种方法可以有效地完成问题所要求的 (
Any)。 OP 不喜欢它,不是因为它不符合 OP 的要求,而是因为它看起来不漂亮。什么好看什么不好看主要是基于意见。我没有投票,也不会投票,但我明白为什么其他人会投票。 -
我不是在问如何检查集合是否为空,我是在问如果列表中的 none 值与谓词。我并不是说我不喜欢
Any,我喜欢Any。我在问 LINQ 中是否存在我觉得缺少的方法:None. -
不,它不是重复的,因为“使用 LINQ 检查列表是否为空”涉及检查列表是否为空,而此问题涉及处理没有元素的情况非空列表匹配一些条件。