2013-07-17 101 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();