Это ожидаемое поведение: вы пытаетесь использовать List<FlightRoute>
как List<BaseModel>
, но только потому, что FlitghtRoute
наследует от BaseModel
, не делает List<FlitghtRoute>
наследованным от List<BaseModel>
: они совершенно разные типы.
Вместо этого вы можете использовать Covariance , используя интерфейсы вместо конкретных типов.
Изменив сигнатуру метода следующим образом, вы заметите, что ошибка компилятора не будет генерироваться:
public static List<T> ToDTO<T>(this IEnumerable<BaseModel> models)
{
return Mapper.Map<List<T>>(models);
}
Это потому, что IEnumerable<T>
- это интерфейс с параметром ковариантный . Взглянув на справочный источник , вы заметите, что этот интерфейс объявлен с out T
как параметр универсального типа, который указывает, что T
является ковариантным и может быть заменен любым унаследованным типом, когда мы используем IEnumerable<T>
.