Task<IDictionary<double, double>> GetTaskDict()
{
return Task.FromResult(new Dictionary<double, double> () );
}
此代码无法编译,因为我们无法在 Task
IDictionary<double, double> GetTaskDict()
{
return new Dictionary<double, double> ();
}
最佳答案
return Task.FromResult<IDictionary<double, double>>(new Dictionary<double, double>());
这是因为 Task<T>
不是协变的,所以 Task<Foo>
不能与 Task<IFoo>
互换即使Foo : IFoo
.
您不妨考虑使用ValueTask<T>
如果您要获得大量同步可用的结果-在这种情况下要便宜得多。你甚至可以使用隐含的 new()
在那种情况下的用法:
ValueTask<IDictionary<double, double>> GetTaskDict()
{
return new(new Dictionary<double, double>());
}
(这里,new(...)
从方法声明的返回类型解释为 new ValueTask<IDictionary<double, double>>(...)
)
关于c# - 使用 Task.FromResult 将 Task<T> 隐式转换为 Task<X> 其中 T : X?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67061611/