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