返回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
可能意味着更具体的东西; null
。 一些具体的例子:
null
表示元素丢失,而空集合会呈现冗余(可能不正确) <collection />
上一篇: Is it better to return null or empty collection?
下一篇: C# Set collection?