CA1857: O parâmetro espera uma constante para um desempenho ideal
Property | valor |
---|---|
ID da regra | CA1857 |
Título | O parâmetro espera uma constante para um desempenho ideal |
Categoria | Desempenho |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Como aviso |
Motivo
Um argumento inválido é passado para um parâmetro anotado com ConstantExpectedAttribute.
Descrição da regra
Esta regra sinaliza locais no seu código onde:
- Implemente um método herdado que use o atributo, ConstantExpectedAttribute mas não marque seu parâmetro com ConstantExpectedAttribute.
- Passe um argumento não constante para um parâmetro que tenha o ConstantExpectedAttribute atributo.
- Passe um argumento constante inválido para um parâmetro que tenha o ConstantExpectedAttribute atributo.
- Passe um argumento constante para um parâmetro que tenha o atributo e o ConstantExpectedAttribute argumento está fora do intervalo dos Min valores ou Max .
Como corrigir violações
Corrija seu código conforme indicado pela mensagem de erro específica que você recebe.
Exemplo 1 (atributo esperado)
O trecho de código a seguir mostra uma violação de 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();
}
O trecho de código a seguir corrige a violação:
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();
}
Exemplo 2 (constante não constante)
O trecho de código a seguir mostra uma violação de CA1857:
static void M1(int i) => M2(i);
static void M2([ConstantExpected] int i) { }
O trecho de código a seguir corrige a violação:
static void M1([ConstantExpected] int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Exemplo 3 (constante inválida)
O trecho de código a seguir mostra uma violação de CA1857:
static void M1() => M2((string)(object)20);
static void M2([ConstantExpected] string s) { }
O trecho de código a seguir corrige a violação:
static void M1() => M2("20");
static void M2([ConstantExpected] string s) { }
Exemplo 4 (constante fora dos limites)
O trecho de código a seguir mostra uma violação de CA1857:
static void M1() => M2(5);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
O trecho de código a seguir corrige a violação:
static void M1() => M2(4);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Quando suprimir avisos
É seguro suprimir um aviso dessa regra se o desempenho não for uma preocupação.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable CA1857
// The code that's violating the rule is on this line.
#pragma warning restore CA1857
Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1857.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.