CA1854: Föredrar IDictionary.TryGetValue(TKey, out TValue)
metoden
Property | Värde |
---|---|
Regel-ID | CA1854 |
Title | IDictionary.TryGetValue(TKey, out TValue) Föredrar metoden |
Kategori | Prestanda |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
En IDictionary
elementåtkomst som är skyddad av en IDictionary.ContainsKey
kontroll.
Regelbeskrivning
När ett element i en IDictionary
används söker indexerarens implementering efter ett null-värde genom att anropa IDictionary.ContainsKey
metoden. Om du också anropar IDictionary.ContainsKey
i en if
-sats för att skydda ett värdeuppslag utförs två sökningar när endast en krävs.
Så här åtgärdar du överträdelser
Ersätt anropet IDictionary.ContainsKey
och elementåtkomsten med ett anrop till IDictionary.TryGetValue
metoden.
Överträdelse:
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
Lösningen
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
När du ska ignorera varningar
Det är säkert att ignorera den här varningen om du använder en anpassad implementering av IDictionary
som undviker en värdesökning när du IDictionary.ContainsKey
utför kontrollen.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1854
// The code that's violating the rule is on this line.
#pragma warning restore CA1854
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1854.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.