我正在写一些单元测试,并且我有一个场景,如果条件为真,控制器操作应返回HttpNotFoundResult
,否则它应该返回ViewResult
并在其中包含特定的模型。ActionResult as ViewResult返回null ..但我可以明确施放?
作为测试之一(测试应该返回ViewResult
的场景),我执行该操作,然后尝试将结果转换为ViewResult
。但是,当使用var result = myController.MyAction() as ViewResult
(其中result
是ActionResult
)时,result
始终计算为空......但是当我执行var result = (ViewResult)myController.MyAction()
时,结果很好。
这是为什么?我不正确理解as
的用法吗?
相关代码:
// My controller
public class MyController
{
..
public ActionResult MyAction(bool condition)
{
if(condition)
return HttpNotFound()
return View(new object());
}
}
// My test
public void MyTest()
{
....
var controller = new MyController();
var result = controller.MyAction(false) as ViewResult;
// result should be casted successfully by as, but it's not, instead it's unll
// however, this works
var result = (ViewResult) controller.MyAction(false);
// why is this?
}
编辑:与要点完整的示例。对不起,它似乎并不像语法突出显示。 https://gist.github.com/DanPantry/dcd1d55651d220835899
'as'运算符就像一个投射操作。但是,如果转换不可行,返回'null'而不是引发异常。 – Satpal
是的,但是,'ActionResult'到'ViewResult'之间的显式转换不会引发异常 - 事实上,它可以正常工作。那么为什么'ActionResult as ViewResult'返回null? –
'ViewResult'从'ActionResult'继承,因此''应该始终能够投射它。请您可以发布您的*精确*代码或您的问题的可编译的演示(您发布的代码将不会编译,所以不能这样做)。 –