【发布时间】:2019-04-02 14:47:21
【问题描述】:
我在 ASP.NET Core 2.2 的 WebApi 控制器中有一个简单的操作,如下所示:
[HttpGet("test123")]
public ActionResult<string> Test123()
{
return new OkResult();
}
这编译得很好,但我想知道OkResult 对象如何转换为ActionResult<string>?
这些类有不同的继承链:
OkResult -> StatusCodeResult -> ActionResult
而ActionResult<TValue> 只实现IConvertToActionResult
换句话说,ActionResult<string> 不是 OkResult 类的基类型。
如果我手动执行此操作并将代码更改为:
[HttpGet("test123")]
public ActionResult<string> Test123()
{
var a = new OkResult();
var b = a as ActionResult<string>; // Error CS0039
return b;
}
代码无法编译并出现转换错误:
错误 CS0039:无法通过引用转换、装箱转换、拆箱转换、包装转换或空类型转换将类型“Microsoft.AspNetCore.Mvc.OkResult”转换为“Microsoft.AspNetCore.Mvc.ActionResult”
怎么可能第一个代码有效而第二个无效?如何从没有公共基类型的对象转换返回类型?
【问题讨论】:
-
第一个例子使用implicit cast。
-
要支持@KirkLarkin 声明看这里的源代码github.com/aspnet/AspNetCore/blob/…
标签: c# asp.net-core