CA1871:不要将可为 null 的结构传递给“ArgumentNullException.ThrowIfNull”
属性 | 值 |
---|---|
规则 ID | CA1871 |
标题 | 不要将可为 null 的结构传递给“ArgumentNullException.ThrowIfNull” |
类别 | “性能” |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 作为信息 |
原因
例如 int?
Guid?
,将可为 null 的结构传递给 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
有关详细信息,请参阅如何禁止显示代码分析警告。