Так все ОК
public virtual IEnumerable<TEntity> Get()
{
return Context.Set<TEntity>().ToList();
}
Но стоит попытаться сделать так
public virtual Task<IEnumerable<TEntity>> Get()
{
return Context.Set<TEntity>().ToListAsync();
}
и вы получите ошибку неявного приведения 'System.Threading.Tasks.Task<System.Collections.Generic.List<TEntity>>' to 'System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<TEntity>>'
Задать данный вопрос во многом сподвиг меня вот этот ответ на похожий вопрос.
На мой скромный взгляд, данный ответ не объясняет ничего. Да, ковариантность в случае обобщений не работает, хотя постойте, в первом же примере все ОК, или нет? Или ковариантность перестает работать только в случае Task<>
?
В первом примере ковариантности и нет вовсе - у вас тип обобщённого параметра остаётся прежним, TEntity
, а меняется тип самого контейнера. Так как класс List<TEntity>
реализует интерфейс IEnumerable<TEntity>
, ошибок нет. А во втором случае как раз проявляется та самая неработающая ковариантность, о которой говорилось в упомянутом вами ответе.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Почему разные языки по-разному отображают число 9223372036854775807, хотя все используют один и тот же формат 8-байтного double для представления чисел?
Эксперементировал вот по этому гайду с небольшими изменениями, но почему-то в итоге открывается новая страница, а не модальное окно
Почему появляется исключение при изменении пароля, но пароль в базе данных меняется
Можно ли получить список dns proxy не используя при этом браузер ? Желательно средствами c#?