数组与List:该何时使用哪个?
实际上,我只是回答这个问题,以添加一个链接,我很惊讶这个链接还没有被提到过:Eric Lippert's 对于“数组有点危险”的博客文章。
你可以从标题中判断出,它建议在实际情况下使用集合 - 但正如Marc正确指出的那样,有很多场合下数组确实是唯一可行的解决方案。
实际上,你很少需要使用数组。每当你想要添加/删除数据时,绝对使用 List
,因为调整数组大小很昂贵。如果你知道数据长度是固定的,并且你想要针对某个非常特定的原因进行微优化(经过基准测试),那么数组可能是有用的。
List
比数组提供了更多的功能(虽然LINQ稍稍平衡了一下),几乎总是正确的选择。当然,除了params
参数。;-p
作为对照:List
是一维的;而你可以有如int[,]
或string[,,]
等矩形数组 - 但是在对象模型中(如果需要)有其他建模此类数据的方法。
另请参见:
话虽如此,我在我的protobuf-net项目中经常使用数组;完全是为了性能:
- 它做了大量的比特位操作,所以一个
byte[]
对于编码来说几乎是必需的; - 我使用一个本地滚动的
byte[]
缓冲区,在将其发送到底层流之前填充该缓冲区(反之亦然);比BufferedStream
等更快; - 它内部使用基于数组的对象模型(
Foo[]
而不是List
),因为一旦构建大小固定,需要非常快。
但这绝对是一个例外;对于一般的业务处理,List
每次都获胜。