В С# можно ли использовать List <Child> для списка <Parent>?

Я хочу сделать что-то вроде этого:

List<Child> childList = new List<Child>();
...
List<Parent> parentList = childList;

Однако, поскольку parentList является List дочернего предка, а не прямым предком, я не могу этого сделать. Есть ли способ обхода (кроме добавления каждого элемента отдельно)?

Ответ 1

Литье напрямую не допускается, потому что нет способа сделать его типичным. Если у вас есть список жирафов, и вы добавили его в список животных, вы могли бы поставить тигра в список жирафов! Компилятор не остановит вас, потому что, конечно, тигр может войти в список животных. Единственное место, где компилятор может остановить вас, - это небезопасное преобразование.

В С# 4 мы будем поддерживать ковариацию и контравариантность интерфейсов SAFE и типов делегатов, которые параметризуются ссылочными типами. Подробнее см. Здесь:

http://blogs.msdn.com/ericlippert/archive/tags/Covariance+and+Contravariance/default.aspx

Ответ 3

да, вы можете сделать это как

var result = List.And(x => x.Parent.All(b => b.ParentId == value));

Ответ 4

Вы можете сделать это, используя подход Linq для применения метода расширения то есть  Список parentList = childList.Cast(). ToList();