我有一个返回可变数量元素的函数,我应该返回一个数组还是一个List?一旦返回,"集合"的大小不会改变,即出于所有目的,集合是不可变的.我想只返回一个数组,但有些人说不会从函数中返回变量大小的数组,因为它是"糟糕的形式".不知道为什么?
这需要与.NET 2.0兼容吗?
Ree*_*sey 22
如果不需要,返回数组是不好的形式,特别是返回List<T>.
通常,你会想要返回IEnumerable<T>或IList<T>.
如果您的用户只需要遍历每个元素,那么IEnumerable<T>将提供此功能.它还允许您使用延迟执行来潜在地实现例程(现在或以后).
如果您的用户需要按索引访问元素,请返回IList<T>.这提供了数组的所有优点,但为您的实现提供了更大的灵活性.您可以将其实现为数组,列表或其他实现的集合IList<T>,而不必转换/复制到数组.
一种观点,我经常看到一个建议,要么返回IList<T>或ReadOnlyCollection<T>.如果您有其中一个可用,则可以返回它们 - 两者都可以直接分配给IEnumerable<T>它们(它们可以直接使用任何LINQ方法).需要注意的一点ReadOnlyCollection<T>是非常轻量级的类型,可以包装任何IList<T>.
扩展了里德的答案.
Eric Lippert在这个主题上写了一篇很棒的博文.它可能是最详细的答案