c# - LINQ 中是否有 "None()"的等价物?

标签 c# .net linq

我一直遇到这样的情况,我觉得我缺少一个 LINQ 扩展方法,它可以有效地检查集合中是否没有匹配的指定谓词。有 AnyAll ,但是如果我使用以下代码:

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/

相关文章:

c# - 如何在 C# 中为泛型类型创建实例

c# - 禁用 Windows 中除程序 c# 之外的所有内容

c# - 如何 mock 一切?

asp.net - Newtonsoft.Json 中的程序集冲突

.net - 将 IEnumerable 转换为列表

c# - 代码 query.Take(() => 1) 做了什么?

c# - 在LINQ中设置或更新数据

c# - AcquireTokenForClient (MSAL) 是否使用 token 缓存?

.net - Windows 中没有 makecert 的自签名证书?

c# - LINQ 查询复制到数据表