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

Eigenschap Waarde
Regel-id CA1854
Titel Geef de voorkeur aan de IDictionary.TryGetValue(TKey, out TValue) methode
Categorie Prestaties
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

Oorzaak

Een toegang tot het IDictionary element die wordt bewaakt door een IDictionary.ContainsKey check.

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 IDictionary.ContainsKey ook aanroept in een if-clausule om een opzoekactie te bewaken, worden er twee opzoekacties uitgevoerd wanneer er slechts één nodig is.

Hoe schendingen op te lossen

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

Herstel:

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 van IDictionary gebruikt die een waardezoekactie vermijdt bij het controleren van IDictionary.ContainsKey.

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 voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.