繁体   English   中英

返回 Task.FromResult(MyInterface) 时出现编译器错误:无法隐式转换类型

[英]Compiler error while returning Task.FromResult(MyInterface): cannot implicitly convert types

我有两个函数,每个函数返回一个实现接口MyInterfaceActualObject实例:

public class ActualObject : MyInterface
{
     ...
}

Task<MyInterface> GetObjectAsync()
{
    ActualObject obj = GetObjectInternal();
    return Task.FromResult(obj);
}

async Task<MyInterface> GetObjectAsync()
{
    ActualObject obj = await GetObjectInternalAsync();
    return obj;
}

GetObjectInternal()GetObjectInternalAsync()都返回完全相同的 object,只是有两个不同的实现。

第一种方法会给出编译器错误:无法从ActualObject隐式转换为MyInterface ,而第二种方法编译正常。 这是为什么?

Task.FromResult(obj)使用类型推断来推断您的意思是Task.FromResult<ActualObject>(obj) ,然后无法将该任务类型转换为基于接口的任务类型。 Task<T>是不变的。)

要解决此问题,您只需为调用FromResult指定泛型类型参数:

return Task.FromResult<MyInterface>(obj);

(或者您可以将obj声明为MyInterface类型...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM