CA1857: El parámetro espera una constante para un rendimiento óptimo

Propiedad Value
Identificador de la regla CA1857
Título El parámetro espera una constante para un rendimiento óptimo
Categoría Rendimiento
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como advertencia

Causa

Un argumento no válido se pasa a un parámetro anotado con ConstantExpectedAttribute.

Descripción de la regla

Esta regla marca lugares en el código donde:

Cómo corregir infracciones

Corrija el código como se indica en el mensaje de error específico que reciba.

Ejemplo 1 (se esperaba un atributo)

El siguiente fragmento de código muestra una infracción de la regla CA1857:

public interface I1<T>
{
    T M1(T operand1, [ConstantExpected] T operand2);
}

public class C1 : I1<int>
{
    public int M1(int operand1, int operand2) =>
        throw new NotImplementedException();
}

El siguiente fragmento de código corrige la infracción:

public interface I1<T>
{
    T M1(T operand1, [ConstantExpected] T operand2);
}

public class C1 : I1<int>
{
    public int M1(int operand1, [ConstantExpected] int operand2) =>
        throw new NotImplementedException();
}

Ejemplo 2 (constante no constante)

El siguiente fragmento de código muestra una infracción de la regla CA1857:

static void M1(int i) => M2(i);
static void M2([ConstantExpected] int i) { }

El siguiente fragmento de código corrige la infracción:

static void M1([ConstantExpected] int i) => M2(i);
static void M2([ConstantExpected] int i) { }

Ejemplo 3 (constante no válida)

El siguiente fragmento de código muestra una infracción de la regla CA1857:

static void M1() => M2((string)(object)20);
static void M2([ConstantExpected] string s) { }

El siguiente fragmento de código corrige la infracción:

static void M1() => M2("20");
static void M2([ConstantExpected] string s) { }

Ejemplo 4 (constante fuera de límites)

El siguiente fragmento de código muestra una infracción de la regla CA1857:

static void M1() => M2(5);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }

El siguiente fragmento de código corrige la infracción:

static void M1() => M2(4);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }

Cuándo suprimir las advertencias

Es seguro suprimir una advertencia de esta regla 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 CA1857
// The code that's violating the rule is on this line.
#pragma warning restore CA1857

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.CA1857.severity = none

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