我经常遇到这样的问题,即在使用foreach或LINQ查询对IEnumerable<T>
进行迭代之前,需要检查它是否为null。我通常会遇到以下代码:
var myProjection = (myList ?? Enumerable.Empty<T>()).Select(x => x.Foo)...
因此,我想将这个扩展方法添加到一个扩展类中:
public static class MyExtensions
{
public static IEnumerable<T> AsEmptyIfNull<T>(this IEnumerable<T> source)
{
return source ?? Enumerable.Empty<T>();
}
}
看到这段代码,我立刻想到一个小问题,即扩展方法的“实例方法方面”,它应该被实现为一个普通的静态方法,否则像下面这样的代码就是完全合法的:
IEnumerable<int> list = null;
list.AsEmptyIfNull();
您认为在使用它时还有其他缺点吗?
如果大量使用,这种扩展是否会导致开发人员出现某种不良趋势?
奖励问题:
您能给它提供一个更好的名称吗?:)
(英语不是我的母语,所以我不太擅长命名...)
提前感谢。
.AsEmptyIfNull()
之前添加.AsEnumerable()
。另外,我更喜欢将方法称为EmptyIfNull
,因为As
暗示着强制转换,在这里并没有发生。DefaultIfEmpty
也没有被命名为AsDefaultIfEmpty
。 - Palec