property multiple method has generic delegate attribute c# arrays generic-list

multiple - generic restrictions c#



c#array versus lista genérica (7)

Con la lista genérica, puede Add / Remove etc. a bajo precio (al menos, en el otro extremo). Cambiar el tamaño de una matriz (para agregar / eliminar) es más caro. El inconveniente obvio es que una lista tiene capacidad extra, por lo que quizás desperdicie unos pocos bytes, aunque no vale la pena preocuparse en la mayoría de los casos (y puede recortarla).

Generalmente, prefiere listas a menos que sepa que sus datos nunca cambian de tamaño.

En lo que respecta a la API, dado que LINQ tiene poco para elegir entre ellos (es decir, los métodos adicionales en List<T> son en gran medida duplicados por LINQ, por lo que los arrays los obtienen de forma gratuita).

Otra ventaja es que con una lista no es necesario exponer a un colocador:

private readonly List<Foo> items = new List<Foo>(); public List<Foo> Items { get { return items; } }

eliminando un rango de errores null , y permitiéndole mantener el control sobre los datos (especialmente si usa una implementación IList<> diferente que admita la inspección / validación al cambiar los contenidos).

Esta pregunta ya tiene una respuesta aquí:

básicamente quiero saber las diferencias o ventajas al usar una lista genérica en lugar de una matriz en el escenario mencionado a continuación

class Employee { private string _empName; public string EmpName { get{ return _empName; } set{ _empName = value; } } }

1. Employee[] emp 2. List<Employee> emp

¿Puede alguien decirme las ventajas o desventajas y cuál prefiere?


Con una lista, no necesita saber el tamaño de la matriz de antemano. Puede agregar dinámicamente nuevos empleados según las necesidades de su implementación.


La mayor diferencia es que las matrices no se pueden alargar ni acortar una vez que se crean. Las instancias de lista, sin embargo, pueden tener elementos agregados o eliminados. También existen otros diffs (p. Ej., Diferentes conjuntos de métodos disponibles), pero agregar / eliminar es la gran diferencia.

Me gusta List, a menos que haya una buena razón para usar un Array, ya que la flexibilidad de List es buena y la penalización de perf es muy pequeña en comparación con el costo de la mayoría de las otras cosas que normalmente hace tu código.

Si desea sumergirse en una gran cantidad de detalles técnicos interesantes, consulte este hilo de que profundiza en la cuestión de la lista frente a la matriz con más profundidad.


Si conoce la cantidad de elementos, la matriz es una buena opción. Si no, usa la lista. Internally List<T> utiliza una matriz de T, por lo que en realidad son más parecidos de lo que crees.


Si está exponiendo una colección en una interfaz pública, las Pautas de .NET Framework recomiendan usar una Lista en lugar de T []. (De hecho, una BindingList <T>)

Internamente, una matriz puede ser más apropiada si tiene una colección que es un tamaño fijo y conocido. Cambiar el tamaño de una matriz es costoso en comparación con agregar un elemento al final de una lista.


Una gran diferencia es que List<Employee> puede expandirse (puede llamar Add on it) o ​​contraerse (puede llamar a Remove on it) mientras que Employee [] se fija en tamaño. Por lo tanto, es más difícil trabajar con Employee[] a menos que la necesidad lo requiera.


Necesita saber el tamaño de una matriz en el momento en que se creó, pero no puede cambiar su tamaño una vez que se haya creado.

Por lo tanto, utiliza la asignación de memoria dinámica para la matriz en el momento de la creación. (Esto difiere de la asignación de memoria estática como se usa para las matrices C ++, donde el tamaño debe conocerse en tiempo de compilación).

Una lista puede crecer dinámicamente DESPUÉS de que se haya creado, y tiene la función .Add() para hacer eso.

-desde MSDN

  1. Genéricos Vs Array Lists-SO Comparación general.
  2. Lista genérica vs matrices-SO ¿Por qué la lista genérica es más lenta que la matriz?

¿Cuál preferir? List<T> .