Share via


CA1864: Preferujte metodu IDictionary.TryAdd(TKey, TValue)

Vlastnost Hodnota
ID pravidla CA1864
Název Preferujte metodu IDictionary.TryAdd(TKey, TValue)
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Dictionary<TKey,TValue>.Add je strážen hovorem Dictionary<TKey,TValue>.ContainsKey(TKey) .

Popis pravidla

Obojí Dictionary<TKey,TValue>.ContainsKey(TKey) a Dictionary<TKey,TValue>.Add proveďte vyhledávání, které je redundantní. Dictionary<TKey,TValue>.Add vyvolá také výjimku, pokud je klíč již ve slovníku. Je efektivnější volat Dictionary<TKey,TValue>.TryAdd, která vrátí logickou hodnotu, která označuje, jestli byla hodnota přidána nebo ne. TryAdd nepřepíše hodnotu klíče, pokud je klíč již k dispozici.

Jak opravit porušení

Nahraďte volání Dictionary<TKey,TValue>.ContainsKey(TKey) , za kterým následuje volání Dictionary<TKey,TValue>.Add s jedním voláním Dictionary<TKey,TValue>.TryAdd.

Příklad

Následující fragment kódu ukazuje porušení 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

Následující fragment kódu opraví porušení zásad:

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

Kdy potlačit upozornění

Je bezpečné potlačit toto upozornění, pokud výkon není problém a pokud se staráte o výjimku, kterou může vyvolat Dictionary<TKey,TValue>.Add.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

#pragma warning disable CA1864
// The code that's violating the rule is on this line.
#pragma warning restore CA1864

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

[*.{cs,vb}]
dotnet_diagnostic.CA1864.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.