CA1864: Az "IDictionary.TryAdd(TKey, TValue)" metódus használata

Tulajdonság Érték
Szabályazonosító CA1864
Cím Az "IDictionary.TryAdd(TKey, TValue)" metódus előnyben részesítése
Kategória Teljesítmény
A javítás romboló vagy nem romboló Nem törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Javaslatként
Alkalmazandó nyelvek C# és Visual Basic

Ok

A Dictionary<TKey,TValue>.Add-t egy Dictionary<TKey,TValue>.ContainsKey(TKey) hívás védi.

Szabály leírása

Mind a Dictionary<TKey,TValue>.ContainsKey(TKey), mind a Dictionary<TKey,TValue>.Add keresést végez, ami redundáns. Dictionary<TKey,TValue>.Add kivételt is jelez, ha a kulcs már szerepel a szótárban. Hatékonyabb a hívás Dictionary<TKey,TValue>.TryAdd, amely egy logikai értéket ad vissza, amely jelzi, hogy hozzáadták-e az értéket. TryAdd nem írja felül a kulcs értékét, ha a kulcs már létezik.

Szabálysértések kijavítása

Cserélje le az Dictionary<TKey,TValue>.ContainsKey(TKey)-re történő hívást, amit egy Dictionary<TKey,TValue>.Add-hívás követ, egyetlen Dictionary<TKey,TValue>.TryAdd-hívásra.

Példa

A következő kódrészlet a CA1864 megsértését mutatja be:

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

A következő kódrészlet kijavítja a szabálysértést:

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

Mikor kell letiltani a figyelmeztetéseket?

Biztonságosan figyelmen kívül hagyhatja ezt a figyelmeztetést, ha a teljesítmény nem jelent problémát, és ha kezeli a Dictionary<TKey,TValue>.Add által kiváltott kivételt.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.