Sdílet prostřednictvím


CA1857: Parametr očekává konstantu pro optimální výkon.

Vlastnost Hodnota
ID pravidla CA1857
Název Parametr očekává konstantu pro optimální výkon.
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 9 Jako upozornění

Příčina

Neplatný argument se předá parametru, který je opatřen poznámkami ConstantExpectedAttribute.

Popis pravidla

Toto pravidlo označí místa v kódu, kde:

Jak opravit porušení

Opravte kód podle konkrétní chybové zprávy, která se zobrazí.

Příklad 1 (očekává se atribut)

Následující fragment kódu ukazuje porušení 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();
}

Následující fragment kódu opraví porušení zásad:

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();
}

Příklad 2 (konstanta ne konstanta)

Následující fragment kódu ukazuje porušení ca1857:

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

Následující fragment kódu opraví porušení zásad:

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

Příklad 3 (neplatná konstanta)

Následující fragment kódu ukazuje porušení ca1857:

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

Následující fragment kódu opraví porušení zásad:

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

Příklad 4 (konstanta mimo hranice)

Následující fragment kódu ukazuje porušení ca1857:

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

Následující fragment kódu opraví porušení zásad:

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

Kdy potlačit upozornění

Pokud výkon není problém, je bezpečné potlačit upozornění z tohoto pravidla.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

#pragma warning disable CA1857
// The code that's violating the rule is on this line.
#pragma warning restore CA1857

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.