На всякий случай: у меня мало опыта в C #, но если эта общая конструкция означает то же самое, что и в Java, тогда вы должны создать целый новый список, параметризованный супертипом. Другими словами, если каждый экземпляр Bangle
также является экземпляром Akthud
, он не означает, что каждый List<Bangle>
также является List<Akthud>
.
Причина этого в том, что вы можете иметь две ссылки на этот List<Bangle>
. Если вторая ссылка преобразуется, а затем ссылается на нее как List<Akthud>
, тогда разрешается добавить к ней Akthud
, но теперь первая ссылка имеет List<Bangle>
, членами которой являются не все Bangle
s. Нарушение!
При этом, ответ Дэвида Б. должен действительно делать то, что вы хотите, правильно, AFAICT. (Это похоже на операцию копирования.)
[И если я неправильно понимаю семантику обобщений C #, я надеюсь, что кто-то исправит меня в комментарии!]