【发布时间】:2021-08-23 07:52:06
【问题描述】:
考虑代码:
public Task<IHttpActionResult> GetAliases()
{
OkNegotiatedContentResult<IEnumerable<Stuff>> okNegotiatedContentResult
= Ok(GET Enumerable "STUFF");
//wrap stuff in task
Task<OkNegotiatedContentResult<IEnumerable<Alias>>> fromResult
= Task.FromResult(okNegotiatedContentResult);
// return result
return fromResult;
}
我得到错误:
无法将表达式类型 'System.Threading.Tasks.Task
>>' 转换为返回类型'System.Threading.Tasks.Task '
但是OkNegotiatedContentResult 是 IHttpActionResult 的子类,它是返回类型中指定的泛型...
那么为什么这不起作用?以及如何让它工作?是否有某种方法可以在返回类型上表明泛型类的子类也可以接受?
【问题讨论】:
-
对于“为什么”,请参阅this。为什么不直接做
var fromResult = Task.FromResult<IHttpActionResult>(okNegotiatedContentResult);? -
击败我..
-
另外,如果你使用 async 关键字,这不会是一个问题,因为编译器会处理它
-
@Sweeper “为什么”问题的链接答案在这里不适用。正如 Eric 在 his answer 中对另一个链接问题所说:“
Task<T>是那些可以安全协变的稀有类之一”。 -
@41686d6564:“可以”与“是”不同。您链接的答案仍然集中在
Task<T>就语言而言不是规则的例外这一事实。