Share via


CA1853: Onödigt anrop till "Dictionary.ContainsKey(key)"

Property Värde
Regel-ID CA1853
Title Onödigt anrop till "Dictionary.ContainsKey(key)"
Kategori Prestanda
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Introducerad version .NET 7
Aktiverad som standard i .NET 8 Som förslag

Orsak

Ett anrop till Dictionary<TKey,TValue>.Remove(TKey) är skyddat med ett anrop till Dictionary<TKey,TValue>.ContainsKey(TKey).

Regelbeskrivning

Det finns ingen anledning att skydda Dictionary.Remove(key) med Dictionary.ContainsKey(key). Dictionary<TKey,TValue>.Remove(TKey) kontrollerar redan om nyckeln finns och inte utlöser den om den inte finns.

Så här åtgärdar du överträdelser

Ta bort skyddskoden som anropar Dictionary<TKey,TValue>.ContainsKey(TKey).

Exempel

Följande kodfragment visar ett brott mot CA1853:

Dictionary<string, int> d = new();
if (d.ContainsKey("name"))
    d.Remove("name");
Class C
    Shared Sub S()
        Dim d As New Dictionary(Of String, Integer)
        If d.ContainsKey("name") Then
            d.Remove("name")
        End If
    End Sub
End Class

Följande kodfragment åtgärdar överträdelsen:

Dictionary<string, int> d = new();
d.Remove("name");
Class C
    Shared Sub S()
        Dim d As New Dictionary(Of String, Integer)
        d.Remove("name")
    End Sub
End Class

När du ska ignorera varningar

Det är säkert att ignorera en varning om prestanda inte är ett problem.

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 CA1853
// The code that's violating the rule is on this line.
#pragma warning restore CA1853

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.CA1853.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.