MyClass[] array;
List<MyClass> list;
在什么情况下,其中一种优于另一种?为什么?
最佳答案
实际上,您很少需要使用数组。绝对使用List<T>
任何时候您想要添加/删除数据,因为调整数组大小的成本很高。如果您知道数据是固定长度,并且您想出于某些非常具体的原因(在基准测试之后)进行微优化,那么数组可能会很有用。
List<T>
提供了比数组多很多的功能(尽管 LINQ 稍微平衡了一点),并且几乎总是正确的选择。除了params
当然,争论。 ;-p
作为计数器 - List<T>
是一维的;你有矩形(等)数组,如 int[,]
或string[,,]
- 但还有其他方法可以在对象模型中对此类数据进行建模(如果需要)。
另请参阅:
也就是说,我在 protobuf-net 中大量使用了数组。项目;完全为了性能:
- 它进行了大量的位移,因此
byte[]
对于编码来说非常重要; - 我使用本地滚动
byte[]
我在发送到底层流(和 v.v.)之前填充的缓冲区;比BufferedStream
快等等; - 它在内部使用基于数组的对象模型(
Foo[]
而不是List<Foo>
),因为大小在构建后就固定了,并且需要非常快。
但这绝对是一个异常(exception);对于一般业务线处理,a List<T>
每次都赢。
关于.net - 数组与列表<T> : When to use which?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/434761/