CA1854: предпочитать IDictionary.TryGetValue(TKey, out TValue)
метод
Свойство | Значение |
---|---|
Идентификатор правила | CA1854 |
Заголовок | IDictionary.TryGetValue(TKey, out TValue) Предпочитать метод |
Категория | Производительность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 8 | Как предложение |
Причина
Доступ 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
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.