CA1857: Parametr oczekuje stałej w celu uzyskania optymalnej wydajności
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1857 |
Tytuł | Parametr oczekuje stałej optymalnej wydajności |
Kategoria | Wydajność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako ostrzeżenie |
Przyczyna
Nieprawidłowy argument jest przekazywany do parametru, który jest oznaczony adnotacją .ConstantExpectedAttribute
Opis reguły
Ta reguła flaguje miejsca w kodzie, w którym:
- Zaimplementuj metodę dziedziczona, która używa atrybutu, ale nie oznacza parametru ConstantExpectedAttribute za pomocą ConstantExpectedAttributepolecenia .
- Przekaż argument niestałych do parametru ConstantExpectedAttribute , który ma atrybut .
- Przekaż nieprawidłowy argument stałej do parametru ConstantExpectedAttribute , który ma atrybut .
- Przekaż argument stały do parametru ConstantExpectedAttribute , który ma atrybut, a argument jest poza zakresem Min wartości lub Max .
Jak naprawić naruszenia
Popraw kod wskazany przez otrzymany komunikat o błędzie.
Przykład 1 (oczekiwany atrybut)
Poniższy fragment kodu przedstawia naruszenie 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();
}
Poniższy fragment kodu naprawia naruszenie:
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();
}
Przykład 2 (stała nie stała)
Poniższy fragment kodu przedstawia naruszenie ca1857:
static void M1(int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Poniższy fragment kodu naprawia naruszenie:
static void M1([ConstantExpected] int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Przykład 3 (nieprawidłowa stała)
Poniższy fragment kodu przedstawia naruszenie ca1857:
static void M1() => M2((string)(object)20);
static void M2([ConstantExpected] string s) { }
Poniższy fragment kodu naprawia naruszenie:
static void M1() => M2("20");
static void M2([ConstantExpected] string s) { }
Przykład 4 (stała poza granicami)
Poniższy fragment kodu przedstawia naruszenie ca1857:
static void M1() => M2(5);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Poniższy fragment kodu naprawia naruszenie:
static void M1() => M2(4);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli wydajność nie jest problemem.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1857
// The code that's violating the rule is on this line.
#pragma warning restore CA1857
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1857.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.