1

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

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

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

在其他一些语言中,只需调用即可.All()确保所有元素都为真。在没有 akward 的情况下,在 c# 中是否可能发生这样的事情.All(x=>x)

4

1 回答 1

3

您无法避免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();
于 2013-07-17T06:38:07.180 回答