0

我有一个方法可以将 string.IsNullOrWhiteSpace(string value) 转换为扩展方法。

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. 我不想完全禁用它,因为它应该在我不进行空检查时出现。

编辑:

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

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

这可以解决问题。

4

3 回答 3

2

找到了!

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

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

这可以解决问题。

于 2015-10-29T16:23:40.043 回答
1

除了,如果你想删除警告(ReSharper v2016.2),它应该false代替true答案中显示的。

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

代替

[ContractAnnotation("parameterName:null => true")]
于 2017-01-14T13:27:59.667 回答
0

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

((string)null).IsNullOrWhiteSpace()

Resharper 很担心。

重写代码如下:

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

也许它会停止抱怨。

于 2015-10-27T14:38:40.893 回答