MyClass[] array;
List<MyClass> list;
What are the scenarios when one is preferable over the other? And why?
It is rare, in reality, that you would want to use an array. Definitely use a List<T>
any time you want to add/remove data, since resizing arrays is expensive. If you know the data is fixed length, and you want to micro-optimise for some very specific reason (after benchmarking), then an array may be useful.
List<T>
offers a lot more functionality than an array (although LINQ evens it up a bit), and is almost always the right choice. Except for params
arguments, of course. ;-p
As a counter - List<T>
is one-dimensional; where-as you have have rectangular (etc) arrays like int[,]
or string[,,]
- but there are other ways of modelling such data (if you need) in an object model.
See also:
That said, I make a lot of use of arrays in my protobuf-net project; entirely for performance:
byte[]
is pretty much essential for encoding;byte[]
buffer which I fill before sending down to the underlying stream (and v.v.); quicker than BufferedStream
etc;Foo[]
rather than List<Foo>
), since the size is fixed once built, and needs to be very fast.But this is definitely an exception; for general line-of-business processing, a List<T>
wins every time.