Compartilhar via


CA1857: O parâmetro espera uma constante para um desempenho ideal

Propriedade Valor
ID da regra CA1857
Título O parâmetro espera uma constante para um desempenho ideal
Categoria Desempenho
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Como aviso

Causa

Um argumento inválido é transmitido para um parâmetro que é anotado com ConstantExpectedAttribute.

Descrição da regra

Essa regra sinaliza locais no código em que você:

Como corrigir violações

Corrija o código conforme indicado pela mensagem de erro específica recebida.

Exemplo 1 (atributo esperado)

O seguinte snippet de código mostra uma violação da 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 seguinte snippet de código conserta 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 seguinte snippet de código mostra uma violação da CA1857:

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

O seguinte snippet de código conserta a violação:

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

Exemplo 3 (constante inválida)

O seguinte snippet de código mostra uma violação da CA1857:

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

O seguinte snippet de código conserta a violação:

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

Exemplo 4 (constante fora dos limites)

O seguinte snippet de código mostra uma violação da CA1857:

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

O seguinte snippet de código conserta 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 é uma preocupação.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar 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 em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

Para obter mais informações, confira Como suprimir avisos de análise de código.