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.