Delen via


CA1857: De parameter verwacht een constante voor optimale prestaties

Eigenschappen Weergegeven als
Regel-id CA1857
Titel De parameter verwacht een constante voor optimale prestaties
Categorie Prestaties
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Als waarschuwing

Oorzaak

Er wordt een ongeldig argument doorgegeven aan een parameter met ConstantExpectedAttributeaantekeningen.

Beschrijving van regel

Deze regel markeert plaatsen in uw code waar u:

Schendingen oplossen

Corrigeer uw code zoals aangegeven door het specifieke foutbericht dat u ontvangt.

Voorbeeld 1 (kenmerk verwacht)

In het volgende codefragment ziet u een schending van 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();
}

Met het volgende codefragment wordt de schending opgelost:

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

Voorbeeld 2 (constante niet constant)

In het volgende codefragment ziet u een schending van CA1857:

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

Met het volgende codefragment wordt de schending opgelost:

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

Voorbeeld 3 (ongeldige constante)

In het volgende codefragment ziet u een schending van CA1857:

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

Met het volgende codefragment wordt de schending opgelost:

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

Voorbeeld 4 (constante buiten grenzen)

In het volgende codefragment ziet u een schending van CA1857:

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

Met het volgende codefragment wordt de schending opgelost:

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

Wanneer waarschuwingen onderdrukken

Het is veilig om een waarschuwing van deze regel te onderdrukken als de prestaties geen probleem zijn.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

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

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.