Resharper警告空字符串(System.NullReferenceException)

Noc*_*tis 7 c# string nullreferenceexception resharper-8.0

只是想确定我没有编写太长时间...但是,这似乎不太可能:

string System.NullReferenceExceptionhttp://i.imgur.com/TBjpNTX.png

我创建var,检查null,如果是,则返回,所以我无法在那时看到它为null :)

Resharper bug?

编辑:
根据Igal Tabachnik的回答,他是对的,我正在使用以下方法扩展:

public static bool IsNullOrEmpty(this string target)
{
    return String.IsNullOrEmpty(target);
}
Run Code Online (Sandbox Code Playgroud)

我发现它更容易阅读

if (some_string.IsNullOrEmpty())
  // do something here 
Run Code Online (Sandbox Code Playgroud)

而不是:

if (string.IsNullOrEmpty(some_string))
  // do something here 
Run Code Online (Sandbox Code Playgroud)

解决方案:
Igal Tabachnik是对的.唯一缺少的2件是:

  1. Resharper - >选项 - >代码注释(在代码检查组下) - >打开解决方案.
  2. 给VS几分钟时间来刷新一切.

Iga*_*nik 10

您的代码表明IsNullOrEmpty()您使用的方法是您自己的自定义Extension方法."真实" IsNullOrEmpty是一种静态的方法string.

简短的回答:如果你改成它

if (string.IsNullOrEmpty(input_string))
    return "...";
Run Code Online (Sandbox Code Playgroud)

ReSharper将停止抱怨.

答案很长:由于这是您自己的扩展方法,因此ReSharper无法知道此方法的结果如何应用于您的代码.为此,ReSharper使用代码注释来计算有关代码的其他信息.一个这样的注释称为契约注释,它是ReSharper用来计算原始string.IsNullOrEmpty()方法结果的东西.您可以在博客文章中阅读更多相关信息.

最重要的是,如果您想使用自己的扩展方法,但让ReSharper正确理解它,您必须在其上应用以下契约注释:

[ContractAnnotation("null=>true")]
public static bool IsNullOrEmpty(this string input)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)