背景:我给我的同事发了一封电子邮件,告诉他们Enumerable.Empty<T>()
作为一种返回空集合的方法,而不做类似return new List<T>();
我收到回复说缺点是它不公开特定类型的事情:
这确实提出了一个小问题。尽可能具体地说明您的返回类型总是好的*(因此,如果您要返回 List<>,请将其设为您的返回类型);那是因为像列表和数组这样的东西有额外的有用的方法。此外,在使用来自调用方法的集合时,它还有助于考虑性能。
不幸的是,下面的技巧迫使您返回一个 IEnumerable,它尽可能地不具体,对吧?:(
* 这实际上来自 .NET 设计指南。我相信,指南中陈述的原因与我在这里提到的相同。
这似乎与我所学到的完全相反,并且尽我所能尝试,我在设计指南中找不到这个确切的建议。我确实找到了这样的一小块:
一定要返回一个非常常用的方法和属性的子
Collection<T>
类。ReadOnlyConnection<T>
后面有一个代码片段,但根本没有更多理由。
话虽如此,这是一个真实且被接受的指导方针(第一个块引用中描述的方式)吗?还是被误解了?我能找到的所有其他 SO 问题都有首选IEnumerable<T>
作为返回类型的答案。也许最初的 .NET 指南已经过时了?
或者,也许它不是那么清楚?是否有一些权衡需要考虑?什么时候返回更具体的类型是个好主意?是否曾建议返回一个具体的泛型类型,或者只返回一个更具体的接口,如IList<T>
and ReadOnlyCollection<T>
?