Udostępnij przez


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 10 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.