Array versus List<T>: ¿Cuándo usar cuál?
MyClass[] array;
List<MyClass> list;
¿Cuáles son los escenarios en los que uno es preferible al otro? ¿Y por qué?
En realidad, es raro que desee utilizar una matriz. Definitivamente use a en List<T>
cualquier momento que desee agregar o eliminar datos, ya que cambiar el tamaño de las matrices es costoso. Si sabe que los datos tienen una longitud fija y desea microoptimizarlos por algún motivo muy específico (después de la evaluación comparativa), entonces una matriz puede resultar útil.
List<T>
ofrece mucha más funcionalidad que una matriz (aunque LINQ la iguala un poco) y casi siempre es la opción correcta. Exceptuando params
las discusiones, claro. ;-pag
Como contador - List<T>
es unidimensional; donde tiene matrices rectangulares (etc.) como int[,]
o string[,,]
, pero hay otras formas de modelar dichos datos (si es necesario) en un modelo de objetos.
Ver también:
- ¿Cómo/Cuándo abandonar el uso de Arrays en c#.net?
- Matrices, ¿cuál es el punto?
Dicho esto, uso mucho los arreglos en mi proyecto protobuf-net ; enteramente para el rendimiento:
- realiza muchos cambios de bits, por lo que a
byte[]
es bastante esencial para la codificación; - Utilizo un
byte[]
búfer móvil local que lleno antes de enviarlo al flujo subyacente (y vv); más rápido queBufferedStream
etc; - utiliza internamente un modelo de objetos basado en matrices (
Foo[]
en lugar deList<Foo>
), ya que el tamaño es fijo una vez construido y debe ser muy rápido.
Pero ésta es definitivamente una excepción; para el procesamiento general de líneas de negocio, List<T>
siempre gana.
Realmente solo respondo para agregar un enlace que me sorprende que aún no se haya mencionado: la entrada del blog de Eric Lippert sobre "Arreglos considerados algo dañinos".
Se puede juzgar por el título que sugiere usar colecciones siempre que sea práctico, pero como señala acertadamente Marc, hay muchos lugares donde una matriz es realmente la única solución práctica.
A pesar de las otras respuestas que recomiendan List<T>
, querrás usar matrices cuando manejes:
- datos de mapa de bits de imagen
- otras estructuras de datos de bajo nivel (es decir, protocolos de red)