Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA1857 |
| Titel | De parameter verwacht een constante voor optimale prestaties |
| Categorie | Prestaties |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Als waarschuwing |
| Toepasselijke talen | C# |
Oorzaak
Er wordt een ongeldig argument doorgegeven aan een parameter die is aangetekend met ConstantExpectedAttribute.
Beschrijving van regel
Deze regel markeert plaatsen in uw code waar u:
- Implementeer een overgenomen methode die gebruikmaakt van het ConstantExpectedAttribute kenmerk, maar markeer de parameter niet met ConstantExpectedAttribute.
- Geef een niet-constant argument door aan een parameter met het ConstantExpectedAttribute kenmerk.
- Geef een ongeldig constant argument door aan een parameter die het ConstantExpectedAttribute kenmerk heeft.
- Geef een constant argument door aan een parameter met het ConstantExpectedAttribute kenmerk en het argument valt buiten het bereik van de Min of Max waarden.
Hoe schendingen op te lossen
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 bereik)
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 negeren als de prestaties geen zorg 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 voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.