【问题标题】:Avoiding Redundancy using LINQ Enumerable All使用 LINQ Enumerable All 避免冗余
【发布时间】:2013-07-17 06:30:32
【问题描述】:

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

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

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

在其他一些语言中,只需调用.All() 即可确保所有元素都为真。如果没有 akward .All(x=>x)

【问题讨论】:

  • 您可以编写自己的扩展方法,命名为 AllTrue 和 AllFalse
  • 也许为 IEnumerable<bool> 编写自己的扩展名为 AllTrue (或其他)并在那里调用 All(x=>x) ? :)

标签: c# linq ienumerable redundancy


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-11-17
    • 2011-06-16
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多