3
    public class HomeController : Controller
{
    public ActionResult Index()
    {
        // Warning  19  CodeContracts: Possibly calling a method on a null reference 'Website.Controllers.HomeController.<Index>o__SiteContainer0.<>p__Site2.Target'    HomeController.cs

        if (ViewBag != null)
        {
            ViewBag.Message = "Be Immortal";
        }

        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}

MVC 3のViewBagに対する[X]暗黙の非ヌル義務を満たす方法を見つけようと頭を悩ませています。新しい動的ViewBagタイプでコードコントラクトをジャイブさせる方法を思いついた人はいますか?

ViewBagSafeなどのベースコントローラーでViewBagをラップできるようにしたいと思います。

ViewBagがnullになることはないので、これはプロジェクトでは実際には問題ではないことを認識していますが、コードコントラクトをデフォルトのnullのままにして、将来のスリップアップをチェックします(警告なしでコンパイルできます)。自分の契約違反のコーディングを簡単に識別できるようにするため)。

4

1 に答える 1

1

問題を追跡しました。これは、動的メンバー ルックアップの初期化ロジックと、C# コンパイラによって出力される静的キャッシュ フィールドに関係しています。これらについて cccheck に教え、System.Core.dll のキャッシュ クラスにいくつかのコントラクトを追加する必要がありました。次のリリースでは、動的アクセス メンバーに対してこれらの警告が発行されなくなります。取り上げてくれてありがとう。

于 2013-04-26T21:56:39.383 に答える