在下面的代码片段中,我不太明白为什么我要实现的内容为什么是不可能的:
在
在这一行代码中,我遇到了一个错误:
接口:
public interface IEntityRepository<out T> : IRepository<IEntity> {
void RequeryDataBase();
IEnumerable<T> Search(string pattern);
Task<IEnumerable<T>> SearchAsync(string pattern);
SearchContext Context { get; }
string BaseTableName { get; }
}
在
IRepository<IEntity>
中只定义了简单的通用增删改查(CRUD)。在这一行代码中,我遇到了一个错误:
Task<IEnumerable<T>> SearchAsync(string pattern);
错误信息如下:
请帮助我理解,为什么我不能在方法返回类型必须是输出安全的。无效的方差:类型参数 T 必须在 Task 上不变地有效。
Task<T>
中使用 <out T>
。
<in T>
。 - JimiEnumerable<T>
,而不仅仅是T
... 我本能地认为这应该可以工作。 - René VogtTask<T>
是一个类,因此它是不变的。 - LeeTask
本身不应该关心返回的内容是什么。 - lokusking