C# Resharper对空字符串发出警告(System.NullReferenceException)

C# Resharper对空字符串发出警告(System.NullReferenceException),c#,string,nullreferenceexception,resharper-8.0,C#,String,Nullreferenceexception,Resharper 8.0,我只是想确定我没有写太久的代码。。。但是,这似乎极不可能: 我创建了var,检查null,如果是,则返回,因此我无法将其视为null:) 再竖琴虫 编辑: 根据Igal Tabachnik的回答,他是对的,我使用以下方法: public static bool IsNullOrEmpty(this string target) { return String.IsNullOrEmpty(target); } 我发现它更容易阅读 if (some_string.IsNullOrEmpt

我只是想确定我没有写太久的代码。。。但是,这似乎极不可能:

我创建了var,检查null,如果是,则返回,因此我无法将其视为null:)

再竖琴虫

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

public static bool IsNullOrEmpty(this string target)
{
    return String.IsNullOrEmpty(target);
}
我发现它更容易阅读

if (some_string.IsNullOrEmpty())
  // do something here 
而不是:

if (string.IsNullOrEmpty(some_string))
  // do something here 
解决方案:
伊格尔·塔巴奇尼克是对的。丢失的仅有两件是:

  • 重新竖琴->选项->代码注释(在代码检查组下)->打开解决方案
  • 给VS几分钟时间刷新所有内容

  • 您的代码建议您使用的
    IsNullOrEmpty()
    方法是您自己的自定义扩展方法。“real”
    IsNullOrEmpty
    string
    的静态方法

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

    if (string.IsNullOrEmpty(input_string))
        return "...";
    
    ReSharper将停止抱怨

    详细回答:因为这是您自己的扩展方法,所以ReSharper无法知道此方法的结果如何应用于您的代码。为此,ReSharper使用代码注释来找出有关代码的附加信息。一个这样的注释称为a,ReSharper使用它来计算原始
    string.IsNullOrEmpty()
    方法的结果。你可以在博客文章中了解更多

    总之,如果您想使用自己的扩展方法,但让ReSharper正确理解它,则必须对其应用以下契约注释:

    [ContractAnnotation("null=>true")]
    public static bool IsNullOrEmpty(this string input)
    {
        ...
    }
    
    您的
    IsNullOrEmpty()
    -方法似乎是您自己的发明,因为原始方法是
    System.String
    的静态方法,而不是扩展方法。ReSharper无法找出该值,但如果使用原始值,它会发现没有任何
    null
    -值可以使其通过

    var str = value as string;
    
    if (string.IsNullOrEmpty(str))
        return;
    
    var unicorn = str.Contains("unicorn");
    

    这不是一个错误。另外:确保在字符串处使用大写的“S”。IsNullOrEmpty@Matthijs为什么?两者都是完全有效的,并编译到
    System.String
    @dav_i:我发誓我刚才看到IsNullOrEmpty不适用于小写字符串。对不起,我错了+1在保持原有扩展方法的同时解决问题。还有豪猪树;)哇,真是个好办法+1当然。这非常有趣:)。你的第一个建议是100%的钱,使用'string.IsNullOrEmpty(my_string)'get's摆脱它。用我的代码更新了问题。但是,扩展方法上的注释并不会使警告消失。我会去看你发布的链接:)不管怎样答案都不错。经过编辑的答案,看起来你是对的,但额外的步骤是在resharper中设置选项。荣誉