CA1863: Usare 'CompositeFormat'
Proprietà | valore |
---|---|
ID regola | CA1863 |
Title | Utilizzare CompositeFormat . |
Categoria | Prestazioni |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | 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.