Share via


CA1864: Geef de voorkeur aan de methode 'IDictionary.TryAdd(TKey, TValue)'

Eigenschappen Weergegeven als
Regel-id CA1864
Titel Geef de voorkeur aan de methode IDictionary.TryAdd(TKey, TValue)'
Categorie Prestaties
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Als suggestie

Oorzaak

Dictionary<TKey,TValue>.Add wordt bewaakt door een Dictionary<TKey,TValue>.ContainsKey(TKey) oproep.

Beschrijving van regel

Beide Dictionary<TKey,TValue>.ContainsKey(TKey) en Dictionary<TKey,TValue>.Add voeren een zoekactie uit, die overbodig is. Dictionary<TKey,TValue>.Add genereert ook een uitzondering als de sleutel al aanwezig is in de woordenlijst. Het is efficiënter om aan te roepen Dictionary<TKey,TValue>.TryAdd, wat een Booleaanse waarde retourneert die aangeeft of de waarde is toegevoegd of niet. TryAdd overschrijft de waarde van de sleutel niet als de sleutel al aanwezig is.

Schendingen oplossen

Vervang een aanroep naar Dictionary<TKey,TValue>.ContainsKey(TKey) die wordt gevolgd door een aanroep van Dictionary<TKey,TValue>.Add één aanroep naar Dictionary<TKey,TValue>.TryAdd.

Opmerking

In het volgende codefragment ziet u een schending van 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

Met het volgende codefragment wordt de schending opgelost:

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

Wanneer waarschuwingen onderdrukken

Het is veilig om deze waarschuwing te onderdrukken als de prestaties geen probleem zijn en als u de uitzondering afhandelt die kan worden gegenereerd door Dictionary<TKey,TValue>.Add.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

#pragma warning disable CA1864
// The code that's violating the rule is on this line.
#pragma warning restore CA1864

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

[*.{cs,vb}]
dotnet_diagnostic.CA1864.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.