CA1864: Föredrar metoden "IDictionary.TryAdd(TKey, TValue)"
Property | Värde |
---|---|
Regel-ID | CA1864 |
Title | Föredrar metoden "IDictionary.TryAdd(TKey, TValue)" |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
Dictionary<TKey,TValue>.Add vaktas av ett Dictionary<TKey,TValue>.ContainsKey(TKey) samtal.
Regelbeskrivning
Både Dictionary<TKey,TValue>.ContainsKey(TKey) och Dictionary<TKey,TValue>.Add utför en sökning, som är redundant. Dictionary<TKey,TValue>.Add genererar också ett undantag om nyckeln redan finns i ordlistan. Det är mer effektivt att anropa Dictionary<TKey,TValue>.TryAdd, vilket returnerar ett booleskt värde som anger om värdet har lagts till eller inte. TryAdd
skriver inte över nyckelns värde om nyckeln redan finns.
Så här åtgärdar du överträdelser
Ersätt ett anrop till Dictionary<TKey,TValue>.ContainsKey(TKey) som följs av ett anrop till Dictionary<TKey,TValue>.Add med ett enda anrop till Dictionary<TKey,TValue>.TryAdd.
Exempel
Följande kodfragment visar ett brott mot 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
Följande kodfragment åtgärdar överträdelsen:
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
När du ska ignorera varningar
Det är säkert att ignorera den här varningen om prestanda inte är ett problem och om du hanterar undantaget som kan genereras av Dictionary<TKey,TValue>.Add.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1864
// The code that's violating the rule is on this line.
#pragma warning restore CA1864
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1864.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.