Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
CA1854: Preferisce il
| Proprietà | valore |
|---|---|
| ID regola | CA1854 |
| Title | Preferisce il IDictionary.TryGetValue(TKey, out TValue) metodo |
| Categoria | Prestazioni |
| La correzione causa un'interruzione o meno | Non rompente |
| Abilitato per impostazione predefinita in .NET 10 | Come suggerimento |
| Linguaggi applicabili | C# e Visual Basic |
Causa
Accesso a un elemento IDictionary sorvegliato da un controllo IDictionary.ContainsKey.
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 l'invocazione IDictionary.ContainsKey e l'accesso agli elementi con una chiamata al metodo IDictionary.TryGetValue.
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.