Я понимаю, что если S является дочерним классом T, то a List<S> является  not дочерним элементом List<T>. Хорошо. Но интерфейсы имеют другую парадигму: если Foo реализует IFoo, то почему List<Foo> нет (пример) a List<IFoo>?
Как не может быть никакого фактического класса IFoo, означает ли это, что мне всегда приходилось бросать каждый элемент списка при экспонировании List<IFoo>? Или это просто плохой дизайн, и я должен определить свой собственный класс коллекции ListOfIFoos, чтобы иметь возможность работать с ними? Мне тоже не кажется разумным...
Каким будет лучший способ разоблачения такого списка, учитывая, что я пытаюсь программировать интерфейсы? В настоящее время я склонен к фактическому хранению моего List<Foo> внутри .
