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中ViewBag的[X]隐式非空义务。3.有没有人想出一种使代码契约与新的动态ViewBag类型兼容的方法?

我最好希望能够将ViewBag包装在基本控制器中,例如ViewBagSafe等。

我确实意识到这不是项目的真正问题,因为ViewBag永远不会为null,但我想保留代码合同,并进行默认的null检查,以防我将来滑倒(并且仍然能够在没有警告的情况下进行编译)这样我就可以轻松确定自己的违约编码)。

最佳答案

我找到了问题所在。它与动态成员查找的初始化逻辑以及C#编译器发出的静态缓存字段有关。我不得不教cccheck有关这些内容,并向System.Core.dll中的缓存类添加了一些协定。下一版本将不再对动态访问成员发出这些警告。感谢您提出来。

关于asp.net-mvc-3 - 与新的MVC 3 ViewBag签订的代码契约(Contract),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6572128/

10-17 01:17