CA1871:不要将可为 null 的结构传递给“ArgumentNullException.ThrowIfNull”
财产 | 价值 |
---|---|
规则 ID | CA1871 |
标题 | 不要将可为 null 的结构传递给“ArgumentNullException.ThrowIfNull” |
类别 | 性能 |
修复是中断修复还是非中断修复 | 非中断 |
默认情况下,在 .NET 9 中启用 | 作为信息 |
原因
当可为 null 的结构(例如,int?
或 Guid?
)被传递给 ArgumentNullException.ThrowIfNull
时,它会被转换为对象类型,这导致性能下降。
规则说明
为了提高性能,最好检查 HasValue
属性并手动引发异常,而不是将可为 null 的结构传递给 ArgumentNullException.ThrowIfNull
。
如何解决违规
检查是否为 null 并手动抛出 ArgumentNullException。
例
以下代码片段显示了对 CA1871 的违反:
static void Print(int? value)
{
ArgumentNullException.ThrowIfNull(value);
Console.WriteLine(value.Value);
}
以下代码片段修复了冲突:
static void Print(int? value)
{
if (!value.HasValue)
{
throw new ArgumentNullException(nameof(value));
}
Console.WriteLine(value.Value);
}
何时禁止显示警告
如果性能不是一个主要问题,可以放心抑制此警告。
禁止显示警告
如果只想取消单个冲突,请将预处理器指令添加到源文件以禁用,然后重新启用规则。
#pragma warning disable CA1871
// The code that's violating the rule is on this line.
#pragma warning restore CA1871
若要禁用文件、文件夹或项目的规则,请将其严重性设置为 配置文件中的 none
。
[*.{cs,vb}]
dotnet_diagnostic.CA1871.severity = none
有关详细信息,请参阅 如何取消代码分析警告。