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 的可玩性怎么样?

Scaffold(逆向工程)现有数据库返回空集

MySQL:选择列为空的行

java 增强for循环对于空集和null的判断