JDa*_*awg 4 c# generics asynchronous covariance
这有什么问题?
// does not compile
interface IRepository<out T>
{
Task<T> Get(int id);
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨:
Invalid variance: The type parameter 'T' must be invariantly valid on ... 'T' is covariant.
Run Code Online (Sandbox Code Playgroud)
但是,当我删除任务时,代码将编译:
// compiles
interface IRepository<out T>
{
T Get(int id);
}
Run Code Online (Sandbox Code Playgroud)
为什么使接口异步会导致其无法编译?
如上所述,Asad Task<T>不能协变,因为它是一类。在MSDN指出:
仅接口类型和委托类型可以具有变量类型参数。
如果只有一个协变ITask<T> 接口。
经过一番谷歌搜索后,我在visualstudio.uservoice.com上找到了建议。在评论中,Jeffrey Morse链接到他的实现ITask<T>。
干得好杰夫!
| 归档时间: |
|
| 查看次数: |
1317 次 |
| 最近记录: |