CA1863: Usare 'CompositeFormat'

Proprietà valore
ID regola CA1863
Titolo Utilizzare CompositeFormat
Categoria Prestazioni
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 No

Causa

Chiamate di String.Format(String, Object[]) codice o StringBuilder.AppendFormat(String, Object[]) con una static stringa di formato che non è stata memorizzata nella cache in un'istanza CompositeFormat di .

Descrizione regola

È costoso analizzare una stringa di formato in fase di esecuzione. Questa regola individua le posizioni nel codice in cui è possibile memorizzare nella cache e usare un'istanza CompositeFormat come argomento per un'operazione di formattazione, anziché passare la stringa di formato originale. Un'istanza CompositeFormat analizza la stringa di formato composito quando viene creata, il che significa che il "percorso critico" della formattazione delle stringhe può essere eseguito molto più velocemente.

Come correggere le violazioni

Creare un'istanza di CompositeFormat chiamando CompositeFormat.Parse(String) e passandola a String.Format(IFormatProvider, CompositeFormat, Object[]) o StringBuilder.AppendFormat(IFormatProvider, CompositeFormat, Object[]) anziché alla stringa di formato originale.

Esempio

L'esempio seguente mostra due violazioni della regola:

class C
{
    private static readonly string StaticField = "Format one value: {0}";

    static void Main()
    {
        _ = string.Format(StaticField, 42);

        StringBuilder sb = new();
        sb.AppendFormat(StaticField, 42);
    }
}

L'esempio seguente illustra il codice che corregge entrambe le violazioni:

class C
{
    private static readonly CompositeFormat StaticField = CompositeFormat.Parse("Format one value: {0}");

    static void Main()
    {
        _ = string.Format(null, StaticField, 42);

        StringBuilder sb = new();
        sb.AppendFormat(null, StaticField, 42);
    }
}

Quando eliminare gli avvisi

Se le prestazioni non sono un problema, è possibile eliminare la diagnostica 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 CA1863
// The code that's violating the rule is on this line.
#pragma warning restore CA1863

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.CA1863.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.