Condividi tramite


CA1854: Preferisce il IDictionary.TryGetValue(TKey, out TValue) metodo

Proprietà valore
ID regola CA1854
Title Preferisce il IDictionary.TryGetValue(TKey, out TValue) metodo
Categoria Prestazioni
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come suggerimento

Causa

Accesso IDictionary di un elemento sorvegliato da un IDictionary.ContainsKey controllo.

Descrizione regola

Quando si accede a un elemento di un oggetto IDictionary , l'implementazione dell'indicizzatore verifica la presenza di un valore Null chiamando il IDictionary.ContainsKey metodo . Se si chiama IDictionary.ContainsKey anche in una if clausola per proteggere una ricerca di valori, vengono eseguite due ricerche quando ne è necessaria una sola.

Come correggere le violazioni

Sostituire la chiamata e l'accesso IDictionary.ContainsKey agli elementi con una chiamata al IDictionary.TryGetValue metodo .

Violazione:

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

Correzione:

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

Quando eliminare gli avvisi

È possibile eliminare questo avviso in modo sicuro se si usa un'implementazione personalizzata di IDictionary che evita una ricerca di valori durante l'esecuzione del IDictionary.ContainsKey controllo.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

#pragma warning disable CA1854
// The code that's violating the rule is on this line.
#pragma warning restore CA1854

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.

[*.{cs,vb}]
dotnet_diagnostic.CA1854.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.