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
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.