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.