这有什么问题?
// does not compile
interface IRepository<out T>
{
Task<T> Get(int id);
}
编译器抱怨:
Invalid variance: The type parameter 'T' must be invariantly valid on ... 'T' is covariant.
但是,当我删除任务时,代码编译:
// compiles
interface IRepository<out T>
{
T Get(int id);
}
为什么要使接口异步导致它无法编译?
答案 0 :(得分:4)
正如Asad上面提到的,Task<T>
不能协变,因为它是类。 MSDN州:
只有界面类型和委托类型才能拥有变体类型 参数。
如果只有协变ITask<T>
界面。
经过一些谷歌搜索后,我在visualstudio.uservoice.com找到了这个建议。在评论中,Jeffrey Morse链接到他的implementation of ITask<T>
。
好工作杰夫!