Поскольку никто еще не указал на это ...
Если вы создаете объект как Y
, его можно привести к X
, а затем снова к Y
, но объектсозданный как X
не может быть приведен к Y
.Это просто базовое поведение ОО.
Это означает, что если вы создаете свой источник данных в виде иерархического списка Y
, вы можете затем преобразовать их в X
, а затем обратно в Y
, когда это подходит.
Фактически, если вы используете Linq, в классе Enumerable существует метод расширения, называемый Cast () .Вы можете использовать его следующим образом:
public class Animal { }
public class Dog : Animal { }
List<Dog> dogs = new List<Dog>();
List<Animal> animals = dogs.Cast<Animal>().ToList();
Вы не упомянули, что вы используете (WinForms / WPF / Silverlight / ASP.NET), но в WPF есть HierarchicalDataTemplate, который можно привязать к списку, которыйявляется подобным узлу (то есть каждый элемент в списке может иметь детей).Использование чего-то подобного с Cast()
сверху должно хорошо работать.
Конечно, это не значит, что вы не должны просматривать свой код и смотреть, действительно ли это лучший способ сделать это (какдругие тоже говорили).