NET问答: 到底是返回 null 好,还是 空集合 好?
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NET问答: 到底是返回 null 好,还是 空集合 好?相关的知识,希望对你有一定的参考价值。
咨询区
Omu:
我是一个 C# 菜鸟,说实话,这个问题是一个非常困惑于我们这样初学者的一个问题,我想知道实际开发中的 最佳实践
应该是什么样的?
回答区
user1228:
如果要我选的话,我会用 空集合
,为什么这么说?我先举个例子:
if(myInstance.CollectionProperty != null)
{
foreach(var item in myInstance.CollectionProperty)
/* arrgh */
}
如果你的代码返回的是 null,那么你必然会一直遇到上面这样的烂代码,你需要无时无刻的焦虑 CollectionProperty
是否为null...
接下来从属性谈起,我认为最佳实践就是初始化的时候 new list
,然后封死 set ,类似下面代码:
public List<Foo> Foos { get; } = new List<Foo>();
如果你的方法返回的是 集合
类型,最好的方式就是用 空集合
替代 null
,参考如下代码:
public IEnumerable<Foo> GetMyFoos()
{
return InnerGetFoos() ?? Enumerable.Empty<Foo>();
}
Karmic Coder
因为 null 不会创建任何对象,理论上它的效率会更高,不利点就是你需要在多个地方判断 null 的情况。
从语义上来说:两者不是一个概念,但他们的区别是微妙的,在特定场景下通常某一个会比另一个更好。
点评区
其实在设计模式中,有一个叫做 Null Object pattern
,不过设计模式考虑更多的是框架设计而不偏效率,所以我还是比较赞同 Karmic Coder
大佬所说。
以上是关于NET问答: 到底是返回 null 好,还是 空集合 好?的主要内容,如果未能解决你的问题,请参考以下文章
编程#到底给孩子选择Scratch还是Python呢?5个问答帮你做决定!
NET问答: String 和 string 到底有什么区别?
互动问答AI 处理器到底是噱头还是趋势? / 新旧款 GoPro 应该怎么选? / 任天堂 Switch 的可玩性怎么样?