让我们说我有这两种方法用于断言和记录失败的断言:
[ContractAnnotation("condition: false => halt")]
public static void AssertCondition(bool condition, string errorMessage = StringUtil.Empty)
{
if (!condition)
{
Logger.Log("AssertCondition failed " + errorMessage, Level.Error);
throw new ArgumentException(errorMessage);
}
}
[ContractAnnotation("condition: null => halt")]
public static void AssertNotNull(object condition, string errorMessage = StringUtil.Empty)
{
if (condition == null)
{
Logger.Log("AssertNotNull failed" + errorMessage, Level.Error);
throw new ArgumentNullException(errorMessage);
}
}
如果我的MVC控制器中有这样的方法:
public string Test()
{
return Request.Url.AbsolutePath;
}
我从ReSharper收到NPE警告。如果我使用这样的第一个断言方法:
public string Test()
{
Preconditions.AssertCondition(Request.Url != null);
return Request.Url.AbsolutePath;
}
我没有得到NPE警告,这是完全预期的并按设计工作。但是如果使用第二个断言,那个指定如果参数为空(null => halt
)则停止的断言,我仍然会收到NPE警告:
public string Test()
{
Preconditions.AssertNotNull(Request.Url);
return Request.Url.AbsolutePath;
}
上面的代码警告我,好像根本没有断言。我做错了什么?据我所知,从我阅读的文档和教程中可以看出,这应该有效。