IEnumerable null合并扩展

| 我经常遇到这样的问题:在通过foreach或LINQ查询对其进行迭代之前,先检查ѭ0是否为空,然后我经常遇到这样的代码:
var myProjection = (myList ?? Enumerable.Empty<T>()).Select(x => x.Foo)...
因此,我想将此扩展方法添加到Extensions类中:
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();
您看到使用它的其他缺点吗? 如果大量使用,这种扩展是否会导致开发人员出现某种不良趋势? 奖励问题: 你能给它起个更好的名字吗?
:)
(英语不是我的母语,所以我的名字不太好...) 提前致谢。     
已邀请:
返回“ 0”的方法应返回一个空值,而不是null。因此,您将不需要此。 看到这个问题:返回null或空集合更好吗? 否则,您的代码看起来还可以。     
如果可以控制,返回一个6而不是一个空序列通常是个坏主意。这是不言而喻的,如果您认为当要求某人生成一个集合时,返回“ 6”并不像说“集合为空”而是“根本没有这样的集合”。 如果您拥有返回枚举数的方法,则返回一个空的
IEnumerable
(如果可能会返回很多,它甚至可以是一个特殊用途的只读静态对象)。 如果您不得不使用这种习惯在这种情况下会返回
null
的坏习惯的库,则此扩展方法可能是一种解决方案,但我仍然不希望这样做。最好将不良方法包装在自己的版本中,以便在人们看不见的地方进行合并。这样,您既可以得到总是具有可枚举值而不是ѭ6的便利,也可以得到不支持“返回null”范式的正确性。     

要回复问题请先登录注册