数组与List:该何时使用哪个?

22 浏览
0 Comments

数组与List:该何时使用哪个?

MyClass[] array;
List list;

一个场景比另一个更可取的情况是什么?为什么会这样?

admin 更改状态以发布 2023年5月22日
0
0 Comments

实际上,我只是回答这个问题,以添加一个链接,我很惊讶这个链接还没有被提到过:Eric Lippert's 对于“数组有点危险”的博客文章。

你可以从标题中判断出,它建议在实际情况下使用集合 - 但正如Marc正确指出的那样,有很多场合下数组确实是唯一可行的解决方案。

0
0 Comments

实际上,你很少需要使用数组。每当你想要添加/删除数据时,绝对使用 List,因为调整数组大小很昂贵。如果你知道数据长度是固定的,并且你想要针对某个非常特定的原因进行微优化(经过基准测试),那么数组可能是有用的。

List比数组提供了更多的功能(虽然LINQ稍稍平衡了一下),几乎总是正确的选择。当然,除了params 参数。;-p

作为对照:List是一维的;而你可以有如int[,] string[,,]等矩形数组 - 但是在对象模型中(如果需要)有其他建模此类数据的方法。

另请参见:

话虽如此,我在我的protobuf-net项目中经常使用数组;完全是为了性能:

  • 它做了大量的比特位操作,所以一个byte[] 对于编码来说几乎是必需的;
  • 我使用一个本地滚动的byte[]缓冲区,在将其发送到底层流之前填充该缓冲区(反之亦然);比BufferedStream等更快;
  • 它内部使用基于数组的对象模型(Foo[]而不是List),因为一旦构建大小固定,需要非常快。

但这绝对是一个例外;对于一般的业务处理,List每次都获胜。

0