CA2264:不要将不可为 null 的值传递给“ArgumentNullException.ThrowIfNull”

属性
规则 ID CA2264
标题 不要将不可为 null 的值传递给“ArgumentNullException.ThrowIfNull”
类别 使用情况
修复是中断修复还是非中断修复 非中断
在 .NET 9 中默认启用 作为警告

原因

当已知永远不会为 null 的值传递给 ArgumentNullException.ThrowIfNull()时,永远不会引发异常,使语句成为 no-op。

规则说明

ArgumentNullException.ThrowIfNull 当传递的参数为 null.. 某些构造(如不可为 null 的结构(除外 Nullable<T>)、“nameof()”表达式和“new”表达式已知永远不会为 null,因此 ArgumentNullException.ThrowIfNull 永远不会引发。

对于结构,由于 ArgumentNullException.ThrowIfNull 接受一个 object?结构,因此将装箱该结构,这会导致额外的性能损失。

如何解决冲突

ArgumentNullException.ThrowIfNull删除呼叫。

示例

以下代码片段显示了 CA2264 的冲突:

static void Print(int value)
{
    ArgumentNullException.ThrowIfNull(value);
    Console.WriteLine(value);
}

以下代码片段修复了冲突:

static void Print(int value)
{
    Console.WriteLine(value.Value);
}

何时禁止显示警告

禁止显示此警告始终是安全的。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

#pragma warning disable CA2264
// The code that's violating the rule is on this line.
#pragma warning restore CA2264

若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none

[*.{cs,vb}]
dotnet_diagnostic.CA2264.severity = none

有关详细信息,请参阅如何禁止显示代码分析警告