0

Mvc.JsonResult由于and之间没有隐式转换,因此Mvc.ViewResult我不能只使用条件运算符,而是以强制转换结束。

这让我想到了我的问题是我会为拳击 JsonResult 带来的性能损失值得还是我应该做一个正常的if...else块?

下面的代码出现在一个普通的控制器动作中:public ActionResult Inactivate()

没有拳击

if (Request.IsAjaxRequest())
{
    return Json(foo);
}
else
{
    return View(bar);
}

VS拳击

return Request.IsAjaxRequest() ? (ActionResult)Json(foo) : View(bar);
4

2 回答 2

2

你可以做任何对你更有效的事情。应该没有性能影响,所以这只是编码风格和清晰度的问题。

在您的第二个示例中,您需要转换 Json(foo) 或 View(bar)。这是因为 ?: 运算符需要知道其参数的类型,而它还不够聪明,无法确定通用的基本类型。这严格来说是编译时的事情,对性能没有影响。

此外,这里没有拳击比赛。JsonResult 和 ViewResult 都是类,而不是结构,所以它们都已经在堆上。

即使有拳击,我怀疑它会对性能产生任何实际影响。ASP.NET MVC 在幕后进行反射,这比装箱要贵得多。

于 2009-11-24T04:51:27.167 回答
0

我认为 JsonResult 和 ViewResult 都继承自 ActionResult,因此不需要强制转换。在您的“无装箱”代码块中,您需要从 Json 和 View 中返回关键字。

于 2009-11-24T00:03:11.680 回答