C#,Resharper,“可能'null'赋值给实体”警告它不应该是

时间:2015-10-27 14:27:46

标签: c# null visual-studio-2015 resharper resharper-9.2

我有一个将string.IsNullOrWhiteSpace(字符串值)转换为扩展方法的方法。

public static bool IsNullOrWhitespace(this string source)
{
  return string.IsNullOrWhiteSpace(source);
}

在我使用它检查null之后,Resharper仍然警告我,我作为[NotNull]参数传递的变量可能为null。

"Possible 'null' assignment to entity marked with 'NotNull' attribute"

如果我用原始(string.IsNullOrWhiteSpace(str))替换我的用法(str.IsNullOrWhiteSpace()),则警告不会显示。

有没有办法使用Resharper我可以训练它知道我的扩展方法是一个有效的空检查器,以便这个空分配警告不显示?

注意:

  1. 我不想用// resharper禁用评论来隐藏它。
  2. 我不想完全禁用它,因为它应该在我不进行空值检查时显示。
  3. 编辑:

    JetBrains.Annotations NuGet包中有一个名为ContractAnnotation的属性可以解决问题。

    [ContractAnnotation("source:null => true")]
    public static bool IsNullOrWhitespace(this string source)
    {
        return string.IsNullOrWhiteSpace(source);
    }
    

    这就是诀窍。

3 个答案:

答案 0 :(得分:2)

发现它!

JetBrains.Annotations NuGet包中有一个名为ContractAnnotation的属性可以解决问题。

[ContractAnnotation("source:null => true")]
public static bool IsNullOrWhitespace(this string source)
{
    return string.IsNullOrWhiteSpace(source);
}

这就是诀窍。

答案 1 :(得分:1)

除非,如果您要删除警告(ReSharper v2016.2),它应该是false而不是true,如答案中所示。

[ContractAnnotation("parameterName:null => false")]

而不是

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

答案 2 :(得分:0)

这是因为你仍然可以打电话

((string)null).IsNullOrWhiteSpace()

和Resharper有关。

重写代码:

(source == null) || string.IsNullOrWhiteSpace(source)

也许它会停止抱怨。