CA1853: ненужный вызов "Dictionary.ContainsKey(key)"

Свойство Значение
Идентификатор правила CA1853
Заголовок Ненужный вызов "Dictionary.ContainsKey(key)"
Категория Производительность
Исправление является критическим или не критическим Не критическое
Представленные версии .NET 7
Включен по умолчанию в .NET 8 Как предложение

Причина

Вызов Dictionary<TKey,TValue>.Remove(TKey) охраняется с помощью вызова Dictionary<TKey,TValue>.ContainsKey(TKey).

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

Нет необходимости охранять Dictionary.Remove(key) с Dictionary.ContainsKey(key). Dictionary<TKey,TValue>.Remove(TKey)уже проверка, существует ли ключ и не вызывается, если он не существует.

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

Удалите защищенный код, который вызывает Dictionary<TKey,TValue>.ContainsKey(TKey).

Пример

В следующем фрагменте кода показано нарушение CA1853:

Dictionary<string, int> d = new();
if (d.ContainsKey("name"))
    d.Remove("name");
Class C
    Shared Sub S()
        Dim d As New Dictionary(Of String, Integer)
        If d.ContainsKey("name") Then
            d.Remove("name")
        End If
    End Sub
End Class

Следующий фрагмент кода исправляет нарушение.

Dictionary<string, int> d = new();
d.Remove("name");
Class C
    Shared Sub S()
        Dim d As New Dictionary(Of String, Integer)
        d.Remove("name")
    End Sub
End Class

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

Это безопасно для подавления предупреждения, если производительность не является проблемой.

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

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

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

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

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

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