CA1871: Do not pass a nullable struct to 'ArgumentNullException.ThrowIfNull'
Property | Value |
---|---|
Rule ID | CA1871 |
Title | Do not pass a nullable struct to 'ArgumentNullException.ThrowIfNull' |
Category | Performance |
Fix is breaking or non-breaking | Non-breaking |
Enabled by default in .NET 9 | As information |
Cause
When a nullable struct, for example, int?
or Guid?
, is passed to ArgumentNullException.ThrowIfNull
, it's boxed to an object, causing a performance penalty.
Rule description
For improved performance, it's better to check the HasValue
property and manually throw an exception than to pass a nullable struct to ArgumentNullException.ThrowIfNull
.
How to fix violations
Check for null and throw the ArgumentNullException manually.
Example
The following code snippet shows a violation of CA1871:
static void Print(int? value)
{
ArgumentNullException.ThrowIfNull(value);
Console.WriteLine(value.Value);
}
The following code snippet fixes the violation:
static void Print(int? value)
{
if (!value.HasValue)
{
throw new ArgumentNullException(nameof(value));
}
Console.WriteLine(value.Value);
}
When to suppress warnings
It's safe to suppress this warning if performance isn't a concern.
Suppress a warning
If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.
#pragma warning disable CA1871
// The code that's violating the rule is on this line.
#pragma warning restore CA1871
To disable the rule for a file, folder, or project, set its severity to none
in the configuration file.
[*.{cs,vb}]
dotnet_diagnostic.CA1871.severity = none
For more information, see How to suppress code analysis warnings.
Phản hồi
https://aka.ms/ContentUserFeedback.
Sắp ra mắt: Trong năm 2024, chúng tôi sẽ dần gỡ bỏ Sự cố với GitHub dưới dạng cơ chế phản hồi cho nội dung và thay thế bằng hệ thống phản hồi mới. Để biết thêm thông tin, hãy xem:Gửi và xem ý kiến phản hồi dành cho