使用LINQ Enumerable All避免冗余

本文关键字:冗余 All LINQ Enumerable 使用 | 更新日期: 2023-09-27 18:22:38

T是布尔数组时,我经常觉得IEnumerable<T>.All方法是多余的。

给定以下示例代码,是否有更好的方法来验证使用All方法

bool isOrdered = firstList
     .Zip(secondList, (first,second)=>first==second)
     .All(areSame => areSame); /* feels redundant */

在其他一些语言中,只需调用.All()就可以确保所有元素都为true。在没有akward .All(x=>x) 的c#中,这样的事情可能吗

使用LINQ Enumerable All避免冗余

All运算符中不能避免谓词。它是签名的一部分,不是可选的:

public static bool All<TSource>(this IEnumerable<TSource> source, 
                                Func<TSource, bool> predicate)

您可以创建自己的All(或更好的AllTrue)扩展,专门用于布尔值集合:

public static bool AllTrue(this IEnumerable<bool> source)
{
    return source.All(b => b);
}
public static bool AllFalse(this IEnumerable<bool> source)
{
    return source.All(b => !b);
}

用法:

bool isOrdered = firstList
     .Zip(secondList, (first,second) => first == second)
     .AllTrue();