CA2264: Do not pass a non-nullable value to 'ArgumentNullException.ThrowIfNull'
Property | Value |
---|---|
Rule ID | CA2264 |
Title | Do not pass a non-nullable value to 'ArgumentNullException.ThrowIfNull' |
Category | Usage |
Fix is breaking or non-breaking | Non-breaking |
Enabled by default in .NET 9 | As warning |
Cause
When a value that's known to never be null is passed to ArgumentNullException.ThrowIfNull()
, an exception is never thrown, making the statement a no-op.
Rule description
ArgumentNullException.ThrowIfNull
throws when the passed argument is null
. Certain constructs like non-nullable structs (except for Nullable<T>), type parameters known to be non-nullable structs, 'nameof()' expressions, and 'new' expressions are known to never be null, so ArgumentNullException.ThrowIfNull
will never throw.
In the case of a struct, since ArgumentNullException.ThrowIfNull
accepts an object?
, the struct is boxed, which causes an additional performance penalty.
How to fix violations
Remove the ArgumentNullException.ThrowIfNull
call.
Example
The following code snippet shows a violation of CA2264:
static void Print(int value)
{
ArgumentNullException.ThrowIfNull(value);
Console.WriteLine(value);
}
The following code snippet fixes the violation:
static void Print(int value)
{
Console.WriteLine(value.Value);
}
When to suppress warnings
It's always safe to suppress this warning.
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 CA2264
// The code that's violating the rule is on this line.
#pragma warning restore CA2264
To disable the rule for a file, folder, or project, set its severity to none
in the configuration file.
[*.{cs,vb}]
dotnet_diagnostic.CA2264.severity = none
For more information, see How to suppress code analysis warnings.