使用自定义参数验证助手会破坏代码分析

Zol*_*ási 10 c# validation code-analysis static-code-analysis

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

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

但是,静态代码分析当然不知道我在使用此帮助程序时确实验证了公共方法中的输入,因此它会给我CA1062有关未验证公共方法参数的错误。

特别的问题是这个

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

Evk*_*Evk 10

创建具有以下名称的属性:

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

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

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

警告应该消失。

您可以看到该属性被许多库使用,包括 .net 框架本身,例如这里