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


CA1864: предпочитать метод IDictionary.TryAdd(TKey, TValue)"

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

Причина

Dictionary<TKey,TValue>.Add охраняется вызовом Dictionary<TKey,TValue>.ContainsKey(TKey) .

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

Оба Dictionary<TKey,TValue>.ContainsKey(TKey) и Dictionary<TKey,TValue>.Add выполнение подстановки, которая является избыточной. Dictionary<TKey,TValue>.Add также вызывает исключение, если ключ уже присутствует в словаре. Это более эффективно для вызова Dictionary<TKey,TValue>.TryAdd, которое возвращает логическое значение, указывающее, было ли добавлено или нет. TryAdd не перезаписывает значение ключа, если ключ уже присутствует.

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

Замените вызов, за которым следует вызов Dictionary<TKey,TValue>.ContainsKey(TKey)Dictionary<TKey,TValue>.Add с одним вызовом Dictionary<TKey,TValue>.TryAdd.

Пример

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

void Run(IDictionary<int, string> dictionary)
{
    if(!dictionary.ContainsKey(2)) {
        dictionary.Add(2, "Hello World");
    }
}
Sub Run(dictionary As IDictionary(Of Integer, String))
    If Not dictionary.ContainsKey(2) Then
        dictionary.Add(2, "Hello World")
    End If
End Sub

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

void Run(IDictionary<int, string> dictionary)
{
    dictionary.TryAdd(2, "Hello World");
}
Sub Run(dictionary As IDictionary(Of Integer, String))
    dictionary.TryAdd(2, "Hello World")
End Sub

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

Это предупреждение безопасно подавлять, если производительность не является проблемой, и если вы обрабатываете исключение, которое может быть вызвано Dictionary<TKey,TValue>.Add.

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

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

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

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

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

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