我正在寫一些單元測試,並且我有一個場景,如果條件爲真,控制器操作應返回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'繼承,因此''應該始終能夠投射它。請您可以發佈您的*精確*代碼或您的問題的可編譯的演示(您發佈的代碼將不會編譯,所以不能這樣做)。 –