Te sugerimos que revises esta solución en un entorno controlado antes de enviarlo a producción, saludos.
Solución:
¿Por qué no simplemente hacer lo siguiente?
Collection collection = new Collection(theList);
como colección (entrada IList) toma una lista como parte de la construcción.
List
no deriva de Collection
– sin embargo, implementa ICollection
. Esa sería una mejor opción de tipo de retorno.
En cuanto a new List
pregunta: depende en parte de cuál sea la colección. Si se implementa ICollection
(en tiempo de ejecución) entonces el constructor puede usar su Count
property para crear la lista con la capacidad inicial correcta antes de recorrerla y agregar cada elemento. Si no se implementa ICollection
entonces es simplemente equivalente a:
List list = new List();
foreach (int x in otherCollection)
list.Add(x);
Todavía es bueno tenerlo en un constructor conveniente, pero no es muy eficiente; en realidad, no puede serlo.
No creo que el constructor haga nada astuto para las matrices, lo que potencialmente podría hacer, usando Array.Copy
o lo que sea para simplemente copiar el lote de una sola vez en lugar de iterar. (Igualmente si fuera otro List
podría llegar al respaldo array y copiar eso directamente.)
List
no hereda de Collection
. Llano y simple. A no ser que List
proporciona un operador para convertir implícitamente a/desde Collection
, no puedes hacerlo. De hecho, sugeriría regresar List
si puedes, ya que creo que las reglas son algo como esto:
Acepte como parámetro la interfaz menos constrictiva posible. Devuelve como parámetro de retorno el tipo más constrictivo posible.
Puedes auxiliar nuestro estudio añadiendo un comentario o puntuándolo te estamos agradecidos.