Me gustaría una colección covariante cuyos elementos se pueden recuperar por índice. IEnumerable es la única colección .net que conozco que es covariante, pero no tiene este soporte de índice.Covarianza e IList
En concreto, me gustaría hacer esto:
List<Dog> dogs = new List<Dog>();
IEnumerable<Animal> animals = dogs;
IList<Animal> animalList = dogs; // This line does not compile
Ahora, estoy consciente de por qué esto es un problema. La lista implementa ICollection
que tiene un método Add. Mediante la conversión a IList
de Animales, permitiría el código posterior para agregar cualquier tipo de animal que no esté permitido en la colección "real" List<Dog>
.
¿Alguien sabe de una colección que admite búsquedas de índice que también es covariante? Me gustaría no crear el mío.
+1 ... la falta de sólo lectura interfaces de la colección en .NET (aparte de 'IEnumerable') hace que este casi imposible, pero me imagino que esto es un uso común -caso, quizás alguien haya encontrado una solución factible después de todo. –
Puede usar IEnumerable <> junto con ElementAt(), aunque la sintaxis no será tan bonita. –