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 9 | 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.