Udostępnij za pośrednictwem


CA1854: Preferuj metodę IDictionary.TryGetValue(TKey, out TValue)

Właściwości Wartość
Identyfikator reguły CA1854
Tytuł Preferuj metodę IDictionary.TryGetValue(TKey, out TValue)
Kategoria Wydajność
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Jako sugestia

Przyczyna

Dostęp IDictionary do elementu, który jest chroniony przez IDictionary.ContainsKey sprawdzenie.

Opis reguły

Gdy dostęp do elementu elementu IDictionary jest uzyskiwany, implementacja indeksatora sprawdza wartość null przez wywołanie IDictionary.ContainsKey metody . Jeśli wywołasz IDictionary.ContainsKey również klauzulę if w celu ochrony wyszukiwania wartości, w razie potrzeby są wykonywane dwa wyszukiwania.

Jak naprawić naruszenia

Zastąp IDictionary.ContainsKey wywołanie i dostęp do elementu wywołaniem IDictionary.TryGetValue metody .

Naruszenie:

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

Poprawka:

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

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć to ostrzeżenie, jeśli używasz niestandardowej implementacji, IDictionary która pozwala uniknąć wyszukiwania wartości podczas sprawdzania IDictionary.ContainsKey .

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.