Resharper ContractAnnotation用于空检查,不消除NRE警告

时间:2014-04-24 12:09:44

标签: c# .net resharper

我遇到了一个问题,我的扩展方法用ContractAnnotation注释告诉R#关于我的对象的null-ness不会导致NRE警告消失。以下是我的项目布局方式:

Project1:JetBrainsExtensions具有定义ContractAnnotation的R#Annotations类

Project2:MyBaseLibrary引用Project1并有一个像这样的扩展方法:

[ContractAnnotation("null => true; notnull => false")]
public static bool IsNull(this object aObject)
{
    return ReferenceEquals(null, aObject);
}

Project3:MyBusinessLogic正在使用MyBaseLibrary项目,并希望这样做:

if (myVariable.IsNull())
     return;

myVariable.DoStuff();

行:myVariable.DoStuff();得到一个可能存在Null Reference Exception的警告。

我遵循了许多/所有相关StackOverflow帖子中列出的有关如何编写注释的建议。我试过了:

[ContractAnnotation("aObject:null => true; aObject:notnull => false")]

[ContractAnnotation("aObject:null => true")]

我也试过了:

if (myVariable.IsNull())
    return; 
else
    myVariable.DoSomething();

认为if / else构造会保存它。没有骰子。

我怀疑问题是我正在打包的多项目/组装方式,但我不完全确定。知道我能做什么吗?


更新:我正在使用ReShaper 8.2。我已经尝试将R#Annotation放在我的BusinessLogic项目中,并且我也在该项目中添加了一个新的扩展方法。这些都没有努力删除NRE。

0 个答案:

没有答案