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:
- Implementujte zděděnou metodu ConstantExpectedAttribute , která používá atribut, ale neoznačí parametr pomocí ConstantExpectedAttribute.
- Předejte ne constantní argument parametru, který má ConstantExpectedAttribute atribut.
- Předejte neplatný argument konstanty parametru, který má ConstantExpectedAttribute atribut.
- Předejte konstantní argument parametru, který má ConstantExpectedAttribute atribut, a argument je mimo rozsah hodnotMin.Max
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.