返回null还是空集合更好?

这是一个普遍的问题(但我正在使用C#),什么是最好的方法(最佳实践),你是否返回null或空收集的方法有一个集合作为返回类型?


空集合。 总是。

这很糟糕:

if(myInstance.CollectionProperty != null)
{
  foreach(var item in myInstance.CollectionProperty)
    /* arrgh */
}

在返回集合或枚举时,不要返回null ,这被认为是最佳实践。 总是返回一个空的枚举/集合。 它可以防止前面提到的废话,并且可以防止您的汽车受到同班同学和您班级用户的怂恿。

在谈论物业时,请务必设置一次物业并忘记物业

public List<Foo> Foos {public get; private set;}

public Bar() { Foos = new List<Foo>(); }

在.NET 4.6.1中,你可以压缩很多:

public List<Foo> Foos { get; } = new List<Foo>();

在讨论返回枚举类型的方法时,可以轻松地返回一个空的枚举而不是null ......

public IEnumerable<Foo> GetMyFoos()
{
  return InnerGetFoos() ?? Enumerable.Empty<Foo>();
}

使用Enumerable.Empty<T>()可以看作比返回效率更高,例如,新的空集合或数组。


从框架设计指南第二版(第256页):

不要从集合属性或返回集合的方法返回空值。 改为返回空集合或空数组。

这里有另一篇有趣的文章,介绍了不返回空值的好处(我试图在布拉德阿布拉姆的博客上找到一些东西,并且他与文章相关)。

编辑 -正如Eric Lippert现在对最初的问题所述,我还想链接到他的优秀文章。


取决于你的合同和你的具体情况。 通常最好返回空集合 ,但有时(很少):

  • null可能意味着更具体的东西;
  • 你的API(合同)可能会强制你返回null
  • 一些具体的例子:

  • 一个UI组件(来自您的控件以外的库)可能会在空集合被传递时呈现空表,或者如果传递了null,则根本没有表。
  • 在Object-to-XML(JSON / whatever)中,其中null表示元素丢失,而空集合会呈现冗余(可能不正确) <collection />
  • 你正在使用或实现一个明确声明应该返回/传递null的API
  • 链接地址: http://www.djcxy.com/p/53883.html

    上一篇: Is it better to return null or empty collection?

    下一篇: C# Set collection?