CA1871: No pasar una estructura anulable a 'ArgumentNullException.ThrowIfNull'
Propiedad | Valor |
---|---|
Identificador de la regla | CA1871 |
Título | No pase una estructura nullable a 'ArgumentNullException.ThrowIfNull' |
Categoría | Rendimiento |
La corrección es problemática o no problemática | Poco problemático |
Habilitado de forma predeterminada en .NET 9 | Según información |
Causa
Cuando una estructura que admite valores NULL, por ejemplo, int?
o Guid?
, se pasa a ArgumentNullException.ThrowIfNull
, se convierte en un objeto, lo que provoca una penalización de rendimiento.
Descripción de la regla
Para mejorar el rendimiento, es mejor comprobar la propiedad HasValue
y lanzar manualmente una excepción que pasar una estructura anulable a ArgumentNullException.ThrowIfNull
.
Cómo corregir infracciones
Compruebe si hay valores null y lance la ArgumentNullException manualmente.
Ejemplo
El fragmento de código siguiente muestra una infracción de CA1871:
static void Print(int? value)
{
ArgumentNullException.ThrowIfNull(value);
Console.WriteLine(value.Value);
}
El siguiente fragmento de código corrige la infracción:
static void Print(int? value)
{
if (!value.HasValue)
{
throw new ArgumentNullException(nameof(value));
}
Console.WriteLine(value.Value);
}
Cuándo suprimir advertencias
Es seguro suprimir esta advertencia si el rendimiento no es un problema.
Suprimir una advertencia
Si solo desea suprimir una sola infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y, a continuación, volver a habilitar la regla.
#pragma warning disable CA1871
// The code that's violating the rule is on this line.
#pragma warning restore CA1871
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none
en el archivo de configuración de .
[*.{cs,vb}]
dotnet_diagnostic.CA1871.severity = none
Para obtener más información, vea Cómo suprimir advertencias de análisis de código.