我一直遇到这样的情况,我觉得我缺少一个 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()
,在某些情况下会导致代码可读性很差。
有没有有效的方法Collection.None(u => u.Distance <= 0)
检查集合中是否没有 0 码或更短距离的对象?它是语法糖而不是实际问题,但我只是觉得它缺失了。
最佳答案
None
与 !Any
相同,因此您可以定义自己的扩展方法,如下所示:
public static class EnumerableExtensions
{
public static bool None<TSource>(this IEnumerable<TSource> source,
Func<TSource, bool> predicate)
{
return !source.Any(predicate);
}
}
关于c# - LINQ 中是否有 "None()"的等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19338122/