Share via


CA1854: Voorkeur geven aan de IDictionary.TryGetValue(TKey, out TValue) methode

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

Oorzaak

Een IDictionary elementtoegang die wordt bewaakt door een IDictionary.ContainsKey controle.

Beschrijving van regel

Wanneer een element van een IDictionary element wordt geopend, controleert de implementatie van de indexeerfunctie op een null-waarde door de methode aan te IDictionary.ContainsKey roepen. Als u ook een if component aanroept IDictionary.ContainsKey om een waardezoekactie te bewaken, worden er twee opzoekacties uitgevoerd wanneer er slechts één nodig is.

Schendingen oplossen

Vervang de IDictionary.ContainsKey aanroep en elementtoegang door een aanroep naar de IDictionary.TryGetValue methode.

Schending:

public string? GetValue(string key)
{
    if (_dictionary.ContainsKey(key))
    {
        return _dictionary[key];
    }

    return null;
}
Public Function GetValue(key As String) As String
    If _dictionary.ContainsKey(key) Then
        Return _dictionary(key)
    End If

    Return Nothing
End Function

Oplossing:

public string? GetValue(string key)
{
    if (_dictionary.TryGetValue(key, out string? value))
    {
        return value;
    }

    return null;
}
Public Function GetValue(key As String) As String
    Dim value as String

    If _dictionary.TryGetValue(key, value) Then
        Return value
    End If

    Return Nothing
End Function

Wanneer waarschuwingen onderdrukken

Het is veilig om deze waarschuwing te onderdrukken als u een aangepaste implementatie gebruikt om een waardezoekactie te voorkomen bij het uitvoeren van IDictionary de IDictionary.ContainsKey controle.

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

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

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.