Бөлісу құралы:


CA1854: предпочитать IDictionary.TryGetValue(TKey, out TValue) метод

Свойство Значение
Идентификатор правила CA1854
Заголовок Предпочитайте метод IDictionary.TryGetValue(TKey, out TValue)
Категория Производительность
Исправление является критическим или не критическим неразрывный
Включен по умолчанию в .NET 10 Как предложение
Применимые языки C# и Visual Basic

Причина

Доступ к элементу IDictionary, который защищен проверкой IDictionary.ContainsKey.

Описание правила

При доступе к элементу IDictionary реализация индексатора проверяет значение NULL, вызывая метод IDictionary.ContainsKey. Если вы также вызываете IDictionary.ContainsKey в условии if для защиты поиска значения, выполняются два поиска, когда требуется только один.

Устранение нарушений

Замените вызов IDictionary.ContainsKey и доступ к элементу на вызов метода IDictionary.TryGetValue.

Нарушение:

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

Исправление:

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

Когда лучше отключить предупреждения

Это предупреждение можно безопасно отключить, если вы используете пользовательскую реализацию IDictionary, которая позволяет избежать поиска значения при проверке IDictionary.ContainsKey.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.