Resharper代码合同不起作用

时间:2014-08-23 10:21:54

标签: c# visual-studio resharper

让我们说我有这两种方法用于断言和记录失败的断言:

[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;
}

上面的代码警告我,好像根本没有断言。我做错了什么?据我所知,从我阅读的文档和教程中可以看出,这应该有效。

0 个答案:

没有答案