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();
您看到使用它的其他缺点吗?
如果大量使用,这种扩展是否会导致开发人员出现某种不良趋势?
奖励问题:
你能给它起个更好的名字吗? :)
(英语不是我的母语,所以我的名字不太好...)
提前致谢。
没有找到相关结果
已邀请:
2 个回复
寒健
荤碗
(如果可能会返回很多,它甚至可以是一个特殊用途的只读静态对象)。 如果您不得不使用这种习惯在这种情况下会返回
的坏习惯的库,则此扩展方法可能是一种解决方案,但我仍然不希望这样做。最好将不良方法包装在自己的版本中,以便在人们看不见的地方进行合并。这样,您既可以得到总是具有可枚举值而不是ѭ6的便利,也可以得到不支持“返回null”范式的正确性。