¿Cuál es la verdadera ventaja de devolver ICollection < T > en lugar de una Lista < T > ;? [duplicar]

StackOverflow https://stackoverflow.com/questions/426182

Pregunta

He leído un par de publicaciones de blog que mencionan que para las API públicas siempre debemos devolver ICollection (o IEnumerable) en lugar de List. ¿Cuál es la verdadera ventaja de devolver ICollection en lugar de una Lista?

¡Gracias!

Duplicado: ¿Cuál es la diferencia entre ¿Lista (de T) y Colección (de T)?

¿Fue útil?

Solución

Un enumerador solo devuelve una entidad a la vez a medida que itera sobre ella. Esto se debe a que utiliza un rendimiento de rendimiento . Una colección, por otro lado, devuelve la lista completa, lo que requiere que la lista se almacene completamente en la memoria.

La respuesta corta es que los enumeradores son más ligeros y más eficientes.

Otros consejos

Te da más libertad al elegir la estructura de datos subyacente.

Una lista supone que la implementación admite la indexación, pero ICollection no hace tal suposición.

Esto significa que si descubre que un conjunto puede proporcionar un mejor rendimiento ya que el pedido es irrelevante, entonces puede cambiar su enfoque sin afectar a los clientes.

Es la encapsulación básica.

Creo que IList sería más apropiado, pero ...

ICollection es solo una interfaz, mientras que List es una implementación específica de esa interfaz. ¿Qué pasa si luego desea utilizar otro contenedor además de una lista? Si expone públicamente una interfaz ICollection, puede cambiar su contenedor interno por otro más adelante, siempre que el nuevo contenedor también implemente la interfaz ICollection.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top