Condividi tramite


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.