2013-07-17 62 views
1

我经常觉得IEnumerable<T>.All方法是多余的,当你的T是一个布尔数组。使用LINQ避免冗余Enumerable全部

考虑下面的示例代码,有没有更好的方法来验证所使用的所有方法

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

在其他一些语言,只是打电话.All()确保所有元素都是如此。是这样的可能在c#中没有这样的不合适.All(x=>x)

+1

您可以编写属于自己的扩展方法,名为AllTrue和AllFalse –

+0

也许可以编写自己的扩展名为IEnumerable '调用'AllTrue'(或其他)并在那里调用'All(x => x)'? :) – wudzik

回答

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();