Вы можете сделать:
var list1 = device.MemoryBanks
.SelectMany(m => new[] { m }.Concat(m.MemoryBlocks))
.ToList();
Обратите внимание, что это создаст List<MemoryBlock>
, а не List<IMemory>
, как в вашем примере.Чтобы составить список типов интерфейса, выполните последний вызов ToList<IMemory>()
.
РЕДАКТИРОВАТЬ:
В .NET 3.5, в которой интерфейс IEnumerable<T>
не является ковариантным, вы можете сделать:
var list1 = device.MemoryBanks
.SelectMany(m => new IMemory[] { m }
.Concat(m.MemoryBlocks.Cast<IMemory>()))
.ToList();