我替换了下面的代码
if (myEnumerable != null)
{
myEnumerable
.Where(o => o.Somehing == something)
.Select(o => o.SomeOtherThing);
}
与
myEnumerable
.EmptyIfNull()
.Where(o => o.Somehing == something)
.Select(o => o.SomeOtherThing);
但以上是可能的,因为我推出了自己的 EmptyIfNull
public static IEnumerable<TElement> EmptyIfNull<TElement>(IEnumerable<TElement source)
{
return source ?? Enumerable.Empty<TElement>();
}
我的问题是,是否已经使用 LINQ 扩展编写了与语法糖相同的此类内容? (不使用 C# 6.0)
没有像这样的标准扩展,很可能是因为返回/传递 null 枚举被认为是一种不好的做法。
在 C#6 (VS2015)你可以用下面的糖
var q = myEnumerable?
.Where(o => o.Somehing == something)
.Select(o => o.SomeOtherThing);
但请注意,与您的 empty enumerable 相比,本例中的结果 q
将为 null
。
编辑 由于您编辑了您的问题并施加了额外的约束,所以忘记 ?.
运算符 - 它不会产生等效的结果(正如我提到的)。但这并没有改变一开始的主要答案
There isn't a standard extension like this
我是一名优秀的程序员,十分优秀!