数组与列表<T>:什么时候用哪个?

MyClass[]数组;
列表<MyClass>列表

当一种情况优于另一种情况时,会出现什么情况?为什么

实际上,很少有人希望使用数组。一定要使用列表<T&gt任何时候添加/删除数据,因为调整数组的大小非常昂贵。如果您知道数据是固定长度的,并且您希望针对一些非常具体的原因(在基准测试之后)进行微观优化,那么阵列可能会很有用

列表<T&gt提供了比数组更多的功能(尽管LINQ会使它变得更均匀),而且几乎总是正确的选择。当然,除了params参数之外-p

作为计数器-列表<T&gt是一维的;其中有矩形(etc)数组,如int[,]string[,,]——但在对象模型中有其他方法建模此类数据(如果需要)

另见:

  • 如何/何时放弃在c#net中使用数组
  • 阵列,有什么意义

也就是说,我在protobuf-net项目中大量使用了数组;完全为了性能:

  • 它会进行大量的位移位,因此字节[]对于编码来说非常重要
  • 我使用一个本地滚动byte[]缓冲区,在发送到底层流(和v.v.)之前填充该缓冲区;快于缓冲流
  • 它在内部使用基于数组的对象模型(Foo[]而不是List<Foo>),因为构建后大小是固定的,并且需要非常快

但这绝对是个例外;对于一般业务线处理,aList<T&gt每次都赢

发表评论