родовые типы полиморфизм - PullRequest
2 голосов
/ 07 марта 2011
public class A {}

public class B : A {}

теперь, каков наилучший способ заставить это работать

List<A> a;
List<B> b = new List<B>();
a = b; // throw Cannot convert List<B> to List<A>

Спасибо

1 Ответ

5 голосов
/ 07 марта 2011

Тип List<T> не поддерживает ковариацию, поэтому вы не можете назначить List<B> непосредственно для List<A>, даже если сам B непосредственно назначен A.Вам нужно будет пройти список b, преобразовав и добавив элементы в список a по мере продвижения.Метод ConvertAll - удобный способ сделать это:

List<B> b = new List<B>();
// ...
List<A> a = b.ConvertAll(x => (A)x);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...