考虑这样的代码:
[HttpPost]
public ActionResult Index(TestModel testModel)
{
//ReSharper PossibleNullReferenceException message appears on the testModel
var x = testModel.Name;
return View(testModel);
}
有没有更好的方法告诉Resharper testModel永远不能为null。我想避免放置Debug.Assert,如果null抛出等等我的动作方法似乎太冗长了。 这也适用于我的服务变量(我正在使用dependecy injection,_ myService.blah等)。我喜欢这个类的绿色Resharper tick(没有错误或警告)告诉我我已经处理了所有空引用和代码正确性。但是如果我忽略了我没有得到绿色标记的消息。
你们如何处理这个问题,你是否用注释来抑制消息,如果抛出空值则放置,添加调试断言(这只会使代码有点过于冗长,因为你可以假设它永远不会为空。
注意:我不想关闭空引用检查(我已将它们设置为警告)。
答案 0 :(得分:4)
嗯,听起来你在ReSharper中打开了“悲观的空检查”,它假设未明确检查null或用[NotNull]
标记的所有内容都为空。默认情况下,ReSharper使用“乐观”方法,如果您没有显式检查null或使用[CanBeNull]
属性标记实体,ReSharper将不会标记它。
您希望使用乐观模式,通过转到ReSharper选项中的代码检查→设置确保启用它,并确保选中突出显示的条目:
这应该会显着减少可能的空引用警告的数量!