我正在编写一个小的封装方法来处理 EF Core 的 DbSet
。我有以下方法:
public Task<IList<TEntity>> GetAsync(Func<IQueryable<TEntity>, IQueryable<TEntity>> getFunction)
{
if (getFunction == null)
{
Task.FromResult(new List<TEntity>());
}
return getFunction(_dbSet).AsNoTracking().ToListAsync();
}
如您所见,这个类是泛型的,而_dbSet是来自上下文的具体DbSet
实例。然而,对于问题并不重要。
对于代码,我得到以下错误:
[CS0029] 无法隐式地将类型 'System.Threading.Tasks.Task>' 转换为 'System.Threading.Tasks.Task<System.Collections.Generic.List<TEntity>>'
如果我将返回值更改为Task<List<TEntity>>
,则没有错误。
有人知道为什么它不能进行转换吗?谢谢!
Task
不是一个接口,因此不支持协变。Task<List<...>>
只能生成List<...>
而不能生成实现IList<...>
接口的任何类。虽然这样做可能是有用的,但并没有被认为足够有用以实际实现。 - Jeroen Mostert