Compartir vía


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.