Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| 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.