0

Mvc.JsonResultと の間には暗黙的な変換がないため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

あなたはあなたにとってより良いものをすることができます。パフォーマンスへの影響はないはずなので、コーディング スタイルと明快さの問題です。

2 番目の例では、Json(foo) または View(bar) をキャストする必要があります。これは、?: 演算子がその引数の型を知る必要があり、共通の基本型を把握するほどスマートではないためです。これは厳密にはコンパイル時のことであり、パフォーマンスには影響しません。

また、ここではボクシングは行われません。JsonResult と ViewResult は両方とも構造体ではなくクラスであるため、両方とも既にヒープ上にあります。

ボクシングがあったとしても、それがパフォーマンスに実際に影響を与えるとは思えません。ASP.NET MVC は舞台裏でリフレクションを行っていますが、これはボクシングよりもはるかにコストがかかります。

于 2009-11-24T04:51:27.167 に答える
0

JsonResult と ViewResult はどちらも ActionResult を継承していると思いますので、キャストは必要ありません。「No Boxing」コード ブロックでは、キーワード return in from of Json と View が必要です。

于 2009-11-24T00:03:11.680 に答える