CA1857: Il parametro prevede una costante per ottenere prestazioni ottimali
Proprietà | valore |
---|---|
ID regola | CA1857 |
Title | Il parametro prevede una costante per ottenere prestazioni ottimali |
Categoria | Prestazioni |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | Come avviso |
Causa
Un argomento non valido viene passato a un parametro annotato con ConstantExpectedAttribute.
Descrizione regola
Questa regola contrassegna le posizioni nel codice in cui:
- Implementare un metodo ereditato che usa l'attributo ConstantExpectedAttribute ma non contrassegnare il parametro con ConstantExpectedAttribute.
- Passare un argomento non costante a un parametro con l'attributo ConstantExpectedAttribute .
- Passare un argomento costante non valido a un parametro con l'attributo ConstantExpectedAttribute .
- Passare un argomento costante a un parametro con l'attributo ConstantExpectedAttribute e l'argomento non è compreso nell'intervallo Min dei valori o Max .
Come correggere le violazioni
Correggere il codice come indicato dal messaggio di errore specifico ricevuto.
Esempio 1 (attributo previsto)
Il frammento di codice seguente mostra una violazione di 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();
}
Il frammento di codice seguente corregge la violazione:
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();
}
Esempio 2 (costante non costante)
Il frammento di codice seguente mostra una violazione di CA1857:
static void M1(int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Il frammento di codice seguente corregge la violazione:
static void M1([ConstantExpected] int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Esempio 3 (costante non valida)
Il frammento di codice seguente mostra una violazione di CA1857:
static void M1() => M2((string)(object)20);
static void M2([ConstantExpected] string s) { }
Il frammento di codice seguente corregge la violazione:
static void M1() => M2("20");
static void M2([ConstantExpected] string s) { }
Esempio 4 (costante non vincolata)
Il frammento di codice seguente mostra una violazione di CA1857:
static void M1() => M2(5);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Il frammento di codice seguente corregge la violazione:
static void M1() => M2(4);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Quando eliminare gli avvisi
Se le prestazioni non sono un problema, è possibile eliminare un avviso da questa regola.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA1857
// The code that's violating the rule is on this line.
#pragma warning restore CA1857
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA1857.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.