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 łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako sugestia
Zastosowane języki C# i Visual Basic

Przyczyna

Dostęp IDictionary do elementu chronionego za pomocą sprawdzenia IDictionary.ContainsKey.

Opis reguły

Gdy uzyskiwany jest dostęp do elementu IDictionary, implementacja indeksatora sprawdza wartość null, wywołując metodę IDictionary.ContainsKey. Jeśli wywołasz IDictionary.ContainsKey także w klauzuli if w celu ochrony wyszukiwania wartości, zostaną wykonane dwa wyszukiwania, gdy potrzebne jest tylko jedno.

Jak naprawić naruszenia

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

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.