CA1854: Preferujte metodu IDictionary.TryGetValue(TKey, out TValue)
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1854 |
Název | Preferujte metodu IDictionary.TryGetValue(TKey, out TValue) |
Kategorie | Výkon |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 9 | Jako návrh |
Příčina
Přístup IDictionary
k elementu, který je strážený kontrolou IDictionary.ContainsKey
.
Popis pravidla
Při přístupu elementu objektu IDictionary
indexer implementace zkontroluje hodnotu null voláním IDictionary.ContainsKey
metody. Pokud voláte také IDictionary.ContainsKey
if
klauzuli, která chrání vyhledávání hodnot, provádějí se dvě vyhledávání, pokud je potřeba jenom jeden.
Jak opravit porušení
IDictionary.ContainsKey
Nahraďte volání a přístup k elementu voláním IDictionary.TryGetValue
metody.
Porušení:
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
Oprava:
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
Kdy potlačit upozornění
Pokud při kontrole IDictionary.ContainsKey
používáte vlastní implementaciIDictionary
, která zabraňuje vyhledávání hodnot při kontrole, je bezpečné toto upozornění potlačit.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1854
// The code that's violating the rule is on this line.
#pragma warning restore CA1854
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1854.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.