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
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 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:

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.