CA1861: Evitare matrici costanti come argomenti
Proprietà | valore |
---|---|
ID regola | CA1861 |
Title | Evitare matrici costanti come argomenti |
Categoria | Prestazioni |
Correzione che causa un'interruzione o un'interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita in .NET 8 | Come suggerimento |
Causa
Una matrice costante di valori letterali viene passata a un metodo tramite una chiamata regolare o una chiamata al metodo di estensione.
Descrizione regola
Le matrici costanti passate come argomenti non vengono riutilizzate quando viene chiamato ripetutamente, il che implica la creazione di una nuova matrice ogni volta. Se la matrice passata non viene modificata all'interno del metodo chiamato, è consigliabile estrarla in un static readonly
campo per migliorare le prestazioni.
Nota
Se il metodo chiamato modifica la matrice passata o se non si è certi che il metodo modifica la matrice, non estrarre la matrice in un static readonly
campo. In questo modo potrebbe essere una modifica che causa un'interruzione. In questo caso, è preferibile eliminare l'avviso.
Come correggere le violazioni
Estrarre matrici costanti nei static readonly
campi se la matrice passata non viene modificata all'interno del metodo chiamato.
L'esempio seguente mostra una violazione della regola:
// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})
Nell'esempio seguente viene illustrato come viene corretta la violazione di questa regola estraendo l'argomento in un static readonly
campo.
private static readonly string[] array = new[] { "Hello" , "world!" };
private string GetMessage()
{
return string.Join(" ", array);
}
Private Shared ReadOnly array As String() = {"Hello", "world!"}
Private Function GetMessage() As String
Return String.Join(" ", array)
End Function
A questo punto, il valore della matrice viene risolto in fase di compilazione anziché in fase di esecuzione, rendendo il codice più efficiente.
Quando eliminare gli avvisi
Eliminare una violazione di questa regola se:
- La chiamata viene eseguita una sola volta.
- La matrice potrebbe essere modificata all'interno del metodo richiamato oppure non si è certi che cambierebbe.
- Non si è preoccupati per l'impatto sulle prestazioni della creazione di una matrice costante per ogni chiamata.
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 CA1861
// The code that's violating the rule is on this line.
#pragma warning restore CA1861
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.CA1861.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.