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 8 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:

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.