CA1857: Parametern förväntar sig en konstant för optimala prestanda
Property | Värde |
---|---|
Regel-ID | CA1857 |
Title | Parametern förväntar sig en konstant för optimal prestanda |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som varning |
Orsak
Ett ogiltigt argument skickas till en parameter som kommenteras med ConstantExpectedAttribute.
Regelbeskrivning
Den här regeln flaggar platser i koden där du:
- Implementera en ärvd metod som använder ConstantExpectedAttribute attributet men inte markerar parametern med ConstantExpectedAttribute.
- Skicka ett icke-konstant argument till en parameter som har attributet ConstantExpectedAttribute .
- Skicka ett ogiltigt konstant argument till en parameter som har attributet ConstantExpectedAttribute .
- Skicka ett konstant argument till en parameter som har ConstantExpectedAttribute attributet och argumentet ligger utom intervallet för Min värdena eller Max .
Så här åtgärdar du överträdelser
Korrigera koden enligt det specifika felmeddelande som du får.
Exempel 1 (förväntat attribut)
Följande kodfragment visar ett brott mot 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();
}
Följande kodfragment åtgärdar överträdelsen:
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();
}
Exempel 2 (konstant inte konstant)
Följande kodfragment visar ett brott mot CA1857:
static void M1(int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Följande kodfragment åtgärdar överträdelsen:
static void M1([ConstantExpected] int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Exempel 3 (ogiltig konstant)
Följande kodfragment visar ett brott mot CA1857:
static void M1() => M2((string)(object)20);
static void M2([ConstantExpected] string s) { }
Följande kodfragment åtgärdar överträdelsen:
static void M1() => M2("20");
static void M2([ConstantExpected] string s) { }
Exempel 4 (konstant utanför gränserna)
Följande kodfragment visar ett brott mot CA1857:
static void M1() => M2(5);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Följande kodfragment åtgärdar överträdelsen:
static void M1() => M2(4);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
När du ska ignorera varningar
Det är säkert att ignorera en varning från den här regeln om prestanda inte är ett problem.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1857
// The code that's violating the rule is on this line.
#pragma warning restore CA1857
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1857.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.