Здравствуйте, nikov, Вы писали:
N>Здравствуйте, dm-CaT, Вы писали:
DC>>Есть ли какое-то решение или так и придётся по одному переприсваивать?
N>Придется по одному — так как дженерики в C# не могут быть ковариантны. Конкретно в случае с mutable списком (каким является класс List<T>) невозможно было бы сделать безопасную ковариантность, даже если бы язык ее поддерживал.
+1
аккуратнее можно было бы вывернуться в случае, если бы требовалось преобразование IEnumerable<parent> = IEnumerable<child>.
static class CovariantEnumAdapter<TBase>
{
public static IEnumerable<TBase> Get<TDerived>(IEnumerable<TDerived> enumerable)
where TDerived : TBase
{
foreach (TDerived item in enumerable)
{
yield return item;
}
}
}
class Base {}
class Derived : Base {}
IEnumerable<Derived> enum1 = ...
IEnumerable<Base> enum2 = CovariantEnumAdapter<Base>.Get(enum1);