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 9 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:
- Implementieren einer geerbte Methode, die das ConstantExpectedAttribute-Attribut verwendet, den Parameter jedoch nicht mit ConstantExpectedAttribute kennzeichnet.
- Übergeben eines nicht konstanten Arguments an einen Parameter, der über das Attribut ConstantExpectedAttribute verfügt.
- Übergeben eines ungültigen konstanten Arguments an einen Parameter, der über das Attribut ConstantExpectedAttribute verfügt.
- Übergeben eines konstanten Arguments an einen Parameter mit dem Attribut ConstantExpectedAttribute, und das Argument liegt außerhalb des Bereichs der Min- oder Max-Werte.
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.