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/