Comparteix a través de


CA1871: No pasar una estructura que acepta valores NULL a 'ArgumentNullException.ThrowIfNull'

Propiedad Value
Identificador de la regla CA1871
Título No pase una estructura que acepta valores NULL 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 Como información

Causa

Cuando un struct que acepta valores NULL, por ejemplo, int? o Guid?, se pasa a ArgumentNullException.ThrowIfNull, se conversión boxing en un objeto, lo que provoca una penalización de rendimiento.

Descripción de la regla

Para mejorar el rendimiento, es mejor comprobar la HasValue propiedad y generar manualmente una excepción que pasar una estructura que acepta valores NULL a ArgumentNullException.ThrowIfNull.

Cómo corregir infracciones

Compruebe si hay valores NULL e inicie manualmente ArgumentNullException .

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 las advertencias

Es seguro suprimir esta advertencia si el rendimiento no es un problema.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y 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 del archivo de configuración.

[*.{cs,vb}]
dotnet_diagnostic.CA1871.severity = none

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.