使用自定义参数验证助手中断代码分析

Using a custom argument validation helper breaks code analysis

我想使用自定义助手来简化参数验证,就像这样。

public static void ThrowIfNull(this object value, string parameterName)
{
    if (value == null)
    {
        throw new ArgumentNullException(parameterName);
    }
}

然而,静态代码分析当然不知道我在使用这个助手时确实验证了 public 方法中的输入,所以它给我 CA1062 关于 [=23= 的错误] 方法参数未被验证。

具体问题是 this one

有没有办法代码分析器这个助手处理参数空值验证?此问题的正确解决方案是什么?

使用以下名称创建属性:

[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
public sealed class ValidatedNotNullAttribute : Attribute {}

然后将其应用于您正在验证的参数:

public static void ThrowIfNull([ValidatedNotNull] this object value, string parameterName)
{
    if (value == null)
    {
        throw new ArgumentNullException(parameterName);
    }
}

警告应该会消失。

你可以看到这个属性被很多库使用,包括.net框架本身,例如here