我有一个扩展方法:
public static bool Exists(this object toCheck)
{
return toCheck != null;
}
如果我使用它然后做这样的事情:
if (duplicate.Exists())
throw new Exception(duplicate);
然后resharper警告我可能存在空引用异常。
我知道这是不可能的,但我怎么能告诉resharper这没关系呢?
答案 0 :(得分:4)
您可以使用合同注释来完成,但是另一个答案中提供的方式对我不起作用(即仍然会产生警告)。但是这个有效:
public static class Extensions {
[ContractAnnotation("null => false; notnull => true")]
public static bool Exists(this object toCheck) {
return toCheck != null;
}
}
获取ContractAnnotationAttribute
- 推荐的方法是安装JetBrains.Annotations
nuget包。如果您不想安装包 - 请转到Resharper>选项>代码注释并按“复制实现到剪贴板”按钮,然后将其粘贴到项目中的任何位置(确保不更改命名空间)。
答案 1 :(得分:3)
您可以使用"Contract Annotation Syntax"向Resharper表明方法在某些情况下无法正常返回,例如:当参数为null时。
对于您的示例,您可以执行以下操作:
[ContractAnnotation(toCheck:notnull => true]
public static bool Exists(this object toCheck)
{
return toCheck != null;
}
toCheck:null => true
告诉Resharper,如果toCheck
不为null,则该方法将返回true
。
[编辑]更新链接以指向最新的Resharper文档。