CA1854: Preferujte metodu IDictionary.TryGetValue(TKey, out TValue)

Vlastnost Hodnota
ID pravidla CA1854
Název Preferujte metodu IDictionary.TryGetValue(TKey, out TValue)
Kategorie Výkon
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Přístup k elementu IDictionary, který je chráněn kontrolou IDictionary.ContainsKey.

Popis pravidla

Při přístupu k elementu objektu IDictionary implementace indexeru zkontroluje hodnotu null tím, že zavolá metodu IDictionary.ContainsKey. Pokud v klauzuli if také voláte IDictionary.ContainsKey, aby byla chráněna kontrola hodnoty, provádějí se dvě vyhledávání, i když je potřeba pouze jedno.

Jak opravit porušení

IDictionary.ContainsKey Nahraďte volání a přístup k prvku voláním metody IDictionary.TryGetValue.

Porušení:

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

Oprava:

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

Kdy potlačit upozornění

Pokud při kontrole IDictionary používáte vlastní implementaciIDictionary.ContainsKey, která zabraňuje vyhledávání hodnot při kontrole, je bezpečné toto upozornění potlačit.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.