CA1857: Der Parameter erwartet eine Konstante für optimale Leistung

Eigenschaft Wert
Regel-ID CA1857
Titel Der Parameter erwartet eine Konstante für optimale Leistung.
Kategorie Leistung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Als Warnung

Ursache

Ein ungültiges Argument wird an einen Parameter übergeben, der mit ConstantExpectedAttribute-Anmerkungen versehen ist.

Regelbeschreibung

Diese Regel kennzeichnet Stellen in Ihrem Code, an denen Sie Folgendes tun können:

Behandeln von Verstößen

Korrigieren Sie Ihren Code entsprechend der spezifischen Fehlermeldung, die Sie erhalten.

Beispiel 1 (Attribut erwartet)

Das folgende Codeschnipsel zeigt eine Verletzung von 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();
}

Der folgende Codeausschnitt korrigiert die Verletzung:

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

Beispiel 2 (Konstante nicht konstant)

Das folgende Codeschnipsel zeigt eine Verletzung von CA1857:

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

Der folgende Codeausschnitt korrigiert die Verletzung:

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

Beispiel 3 (ungültige Konstante)

Das folgende Codeschnipsel zeigt eine Verletzung von CA1857:

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

Der folgende Codeausschnitt korrigiert die Verletzung:

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

Beispiel 4 (Konstante außerhalb der Grenzen)

Das folgende Codeschnipsel zeigt eine Verletzung von CA1857:

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

Der folgende Codeausschnitt korrigiert die Verletzung:

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

Wann sollten Warnungen unterdrückt werden?

Eine Warnung aus dieser Regel kann gefahrlos unterdrückt werden, wenn die Leistung kein Problem darstellt.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.