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 9 | 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.