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


CA1864: предпочтительно использовать метод 'IDictionary.TryAdd(TKey, TValue)'

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

Причина

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

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