Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | valore |
|---|---|
| ID regola | CA1864 |
| Title | Preferisce il metodo 'IDictionary.TryAdd(TKey, TValue)' |
| Categoria | Prestazioni |
| La correzione causa un'interruzione o meno | Non causa un'interruzione |
| Abilitato per impostazione predefinita in .NET 10 | 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.