2009-01-08 9 views
14

He leído un par de publicaciones de blog mencionando 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?¿Cuál es la verdadera ventaja de devolver ICollection <T> en lugar de una lista <T>?

Gracias!

duplicado: What is the difference between List (of T) and Collection(of T)?

+0

replyed aquí: http://stackoverflow.com/questions/271710/collectiont-versus-listt-what-should -utilizas-en-tus-interfaces –

Respuesta

2

Un enumerador sólo devuelve una entidad en un momento como iterar sobre ella. Esto se debe a que utiliza un rendimiento rendimiento. Una colección, por otro lado, devuelve toda la lista, lo que requiere que la lista se almacene por completo en la memoria.

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

+0

¿Eh ?! Creo que quiere decir cómo establecer el tipo de devolución, no el objeto real para devolver. Es una cuestión de contrato de interfaz de clase. –

+0

Preguntaba cuál era la ventaja de devolver un enumerador versus una lista, no cómo hacerlo. – Soviut

0

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

2

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

Una lista supone que la implementación es compatible con la indexación, pero ICollection no lo asume.

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

Es una encapsulación básica.

1

yo creo IList sería más apropiado, pero ...

Cuestiones relacionadas