Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
CA1854: Preferuj metodę
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA1854 |
| Tytuł | Preferuj metodę IDictionary.TryGetValue(TKey, out TValue) |
| Kategoria | Wydajność |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Jako sugestia |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Dostęp IDictionary do elementu chronionego za pomocą sprawdzenia IDictionary.ContainsKey.
Opis reguły
Gdy uzyskiwany jest dostęp do elementu IDictionary, implementacja indeksatora sprawdza wartość null, wywołując metodę IDictionary.ContainsKey. Jeśli wywołasz IDictionary.ContainsKey także w klauzuli if w celu ochrony wyszukiwania wartości, zostaną wykonane dwa wyszukiwania, gdy potrzebne jest tylko jedno.
Jak naprawić naruszenia
Zastąp wywołanie IDictionary.ContainsKey i dostęp do elementu metody wywołaniem IDictionary.TryGetValue.
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.