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:
- Implemente un método heredado que use el atributo ConstantExpectedAttribute pero no marque el parámetro con ConstantExpectedAttribute.
- Pase un argumento no constante a un parámetro que tenga el atributo ConstantExpectedAttribute.
- Pase un argumento constante no válido a un parámetro que tenga el atributo ConstantExpectedAttribute.
- Pase un argumento constante a un parámetro que tenga el atributo ConstantExpectedAttribute y el argumento está fuera del intervalo de los valores Min o Max.
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.