Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
CA1854: предпочитать
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA1854 |
| Заголовок | Предпочитайте метод IDictionary.TryGetValue(TKey, out TValue) |
| Категория | Производительность |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Как предложение |
| Применимые языки | C# и Visual Basic |
Причина
Доступ к элементу 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
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.