Covariance и IList

Мне нужна ковариантная коллекция, элементы которой можно получить по индексу. IEnumerable - единственная коллекция .net, о которой я знаю, является ковариантной, но у нее нет поддержки этого индекса.

В частности, я хотел бы сделать это:

List<Dog> dogs = new List<Dog>();

IEnumerable<Animal> animals = dogs;
IList<Animal> animalList = dogs; // This line does not compile

Теперь я знаю, почему это проблема. List реализует ICollection , у которого есть метод Add. Приведение к IList of Animals позволит последующему коду добавлять любой тип животных, который не разрешен в "реальной" коллекции List .

Итак. Кто-нибудь знает о коллекции, поддерживающей поиск по индексу, которая также является ковариантной? Я бы не хотел создавать свои собственные.

47
задан Alexei Levenkov 13 April 2017 в 19:55
поделиться