CA1864: Preferuj metodę "IDictionary.TryAdd(TKey, TValue)"

Właściwości Wartość
Identyfikator reguły CA1864
Tytuł Preferuj metodę "IDictionary.TryAdd(TKey, TValue)"
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 8 Jako sugestia

Przyczyna

Dictionary<TKey,TValue>.Add jest chroniony przez wywołanie Dictionary<TKey,TValue>.ContainsKey(TKey) .

Opis reguły

Zarówno, Dictionary<TKey,TValue>.ContainsKey(TKey) jak i Dictionary<TKey,TValue>.Add wykonaj wyszukiwanie, które jest nadmiarowe. Dictionary<TKey,TValue>.Add Zgłasza również wyjątek, jeśli klucz jest już obecny w słowniku. Bardziej wydajne jest wywołanie Dictionary<TKey,TValue>.TryAddmetody , która zwraca wartość logiczną wskazującą, czy wartość została dodana, czy nie. TryAdd nie zastępuje wartości klucza, jeśli klucz jest już obecny.

Jak naprawić naruszenia

Zastąp wywołanie elementu Dictionary<TKey,TValue>.ContainsKey(TKey) , po którym następuje wywołanie Dictionary<TKey,TValue>.Add metody , do polecenia z jednym wywołaniem metody Dictionary<TKey,TValue>.TryAdd.

Przykład

Poniższy fragment kodu przedstawia naruszenie 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

Poniższy fragment kodu naprawia naruszenie:

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

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć to ostrzeżenie, jeśli wydajność nie jest problemem i jeśli obsłużysz wyjątek, który może zostać zgłoszony przez program Dictionary<TKey,TValue>.Add.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.