在合并多个集合之前进行空检查

时间:2018-08-10 15:07:02

标签: c# .net linq

我有以下代码,每个集合都继承自MyCollection

initTracks(tracks)

在执行concat之前检查每个值是否不为null的最佳方法是什么?我知道我可以写出一个很大的if else块,但想知道是否有更好的方法

3 个答案:

答案 0 :(得分:4)

您可以声明一个辅助方法EmptyIfNull并检查那里的集合是否为null,如果是,则返回Enumerable.Empty<MyCollection>。然后代码将变为:

MyCollectionA.EmptyIfNull()
             .Concat(MyCollectionB.EmptyIfNull())
             .Concat(MyCollectionC.EmptyIfNull());

当然,您可以根据需要选择一个较短的名称。

EmptyIfNull可以这样声明:

public static IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> source) 
{
    return source ?? Enumerable.Empty<T>(); 
}

答案 1 :(得分:3)

您可以使用null-coalescing运算符和Enumerable.Empty

var result = MyCollectionA.Concat(MyCollectionB ?? Enumerable.Empty<MyClass>())
                          .Concat(MyCollectionB ?? Enumerable.Empty<MyClass>())
                          .Concat(MyCollectionC ?? Enumerable.Empty<MyClass>())
                          .Concat(MyCollectionD ?? Enumerable.Empty<MyClass>())

答案 2 :(得分:0)

没有必要扩展方法。最简单,最短的方法是这样:

yii\bootstrap\Nav::widget()