В С# можно ли использовать 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
Ответ 2
Использование LINQ:
List<Parent> parentList = childList.Cast<Parent>().ToList();
Документация для Cast<>()
Ответ 3
да, вы можете сделать это как
var result = List.And(x => x.Parent.All(b => b.ParentId == value));
Ответ 4
Вы можете сделать это, используя подход Linq для применения метода расширения
то есть
Список parentList = childList.Cast(). ToList();