Поделиться через


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

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

Причина

Доступ 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

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