c# - 无效方差 : The type parameter must be invariantly valid but is covariant

标签 c# generics asynchronous covariance

这是怎么回事?

// 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);
}

为什么使接口(interface)异步会导致它无法编译?

最佳答案

正如上面提到的 Asad,Task<T>不能协变,因为它是一个MSDN状态:

Only interface types and delegate types can have variant type parameters.

要是有一个协变就好了 ITask<T> 界面

谷歌搜索后,我在 visualstudio.uservoice.com 找到了这个建议.在评论中,Jeffrey Morse 链接到他的 implementation of ITask<T> .

干得好,杰夫!

关于c# - 无效方差 : The type parameter must be invariantly valid but is covariant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877447/

相关文章:

c# - 无法在 C# 中隐式转换类型 'System.Collections.Generic.List<AnonymousType#1>

c++ - 通用成员函数指针帮助

Java 泛型 - 实现和扩展

javascript - NodeJS 将 Promise 转换为 Promise.all

c# - .NET Core 依赖注入(inject)——多个项目

c# - 如何从 WCF 服务引用 WCF 客户端而不更改后者的绑定(bind)?

c# - EF6 多对多更改保存但不创建 ChangeTracker 条目

java - 如何在 Eclipse 中运行通用参数化 JUnit 测试?

python - 使用 Tornado 进行并行异步请求时捕获异常

javascript - 三.JS异步处理几何