CA1854: Preferuj metodę IDictionary.TryGetValue(TKey, out TValue)
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1854 |
Tytuł | Preferuj metodę IDictionary.TryGetValue(TKey, out TValue) |
Kategoria | Wydajność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
Przyczyna
Dostęp IDictionary
do elementu, który jest chroniony przez IDictionary.ContainsKey
sprawdzenie.
Opis reguły
Gdy dostęp do elementu elementu IDictionary
jest uzyskiwany, implementacja indeksatora sprawdza wartość null przez wywołanie IDictionary.ContainsKey
metody . Jeśli wywołasz IDictionary.ContainsKey
również klauzulę if
w celu ochrony wyszukiwania wartości, w razie potrzeby są wykonywane dwa wyszukiwania.
Jak naprawić naruszenia
Zastąp IDictionary.ContainsKey
wywołanie i dostęp do elementu wywołaniem IDictionary.TryGetValue
metody .
Naruszenie:
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
Poprawka:
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
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć to ostrzeżenie, jeśli używasz niestandardowej implementacji, IDictionary
która pozwala uniknąć wyszukiwania wartości podczas sprawdzania IDictionary.ContainsKey
.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1854
// The code that's violating the rule is on this line.
#pragma warning restore CA1854
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1854.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.