Megosztás a következőn keresztül:


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 kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

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

Szabály leírása

Mindkettőt Dictionary<TKey,TValue>.ContainsKey(TKey) , és Dictionary<TKey,TValue>.Add végezze el a redundáns kereséseket. 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) arra irányuló hívást, majd a hívásokat Dictionary<TKey,TValue>.Add egyetlen hívásra Dictionary<TKey,TValue>.TryAdd.

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?

Ezt a figyelmeztetést nyugodtan letilthatja, ha a teljesítmény nem okoz problémát, és ha kezeli a kivételt, amelyet Dictionary<TKey,TValue>.Adda rendszer okozhat.

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.