我有以下代码,每个集合都继承自MyCollection
initTracks(tracks)
在执行concat之前检查每个值是否不为null的最佳方法是什么?我知道我可以写出一个很大的if else块,但想知道是否有更好的方法
答案 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()