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

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.