Condividi tramite


CA1864: preferisce il metodo 'IDictionary.TryAdd(TKey, TValue)'

Proprietà valore
ID regola CA1864
Title Preferisce il metodo 'IDictionary.TryAdd(TKey, TValue)'
Categoria Prestazioni
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come suggerimento

Causa

Dictionary<TKey,TValue>.Add è sorvegliato da una Dictionary<TKey,TValue>.ContainsKey(TKey) chiamata.

Descrizione regola

Sia Dictionary<TKey,TValue>.ContainsKey(TKey) che eseguono Dictionary<TKey,TValue>.Add una ricerca, che è ridondante. Dictionary<TKey,TValue>.Add genera anche un'eccezione se la chiave è già presente nel dizionario. È più efficiente chiamare Dictionary<TKey,TValue>.TryAdd, che restituisce un valore booleano che indica se il valore è stato aggiunto o meno. TryAdd non sovrascrive il valore della chiave se la chiave è già presente.

Come correggere le violazioni

Sostituire una chiamata a Dictionary<TKey,TValue>.ContainsKey(TKey) che è seguita da una chiamata a Dictionary<TKey,TValue>.Add con una singola chiamata a Dictionary<TKey,TValue>.TryAdd.

Esempio

Il frammento di codice seguente mostra una violazione di CA1864:

void Run(IDictionary<int, string> dictionary)
{
    if(!dictionary.ContainsKey(2)) {
        dictionary.Add(2, "Hello World");
    }
}
Sub Run(dictionary As IDictionary(Of Integer, String))
    If Not dictionary.ContainsKey(2) Then
        dictionary.Add(2, "Hello World")
    End If
End Sub

Il frammento di codice seguente corregge la violazione:

void Run(IDictionary<int, string> dictionary)
{
    dictionary.TryAdd(2, "Hello World");
}
Sub Run(dictionary As IDictionary(Of Integer, String))
    dictionary.TryAdd(2, "Hello World")
End Sub

Quando eliminare gli avvisi

È possibile eliminare questo avviso se le prestazioni non sono un problema e se si gestisce l'eccezione che potrebbe essere generata da Dictionary<TKey,TValue>.Add.

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 CA1864
// The code that's violating the rule is on this line.
#pragma warning restore CA1864

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

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