我遇到了一个问题,我的扩展方法用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。