CA1854: Preferir o método IDictionary.TryGetValue(TKey, out TValue)
Property | Valor |
---|---|
ID da regra | CA1854 |
Título | Prefira o método IDictionary.TryGetValue(TKey, out TValue) |
Categoria | Desempenho |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 9 | Como sugestão |
Causa
Um acesso de elemento IDictionary
protegido por uma verificação IDictionary.ContainsKey
.
Descrição da regra
Quando um elemento de IDictionary
é acessado, a implementação do indexador verifica se há um valor nulo chamando o método IDictionary.ContainsKey
. Se você também chamar IDictionary.ContainsKey
em uma cláusula if
para proteger uma pesquisa de valor, serão duas pesquisas executadas, quando é necessária apenas uma.
Como corrigir violações
Substitua a invocação IDictionary.ContainsKey
e o acesso de elemento por uma chamada ao método IDictionary.TryGetValue
.
Violação:
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
Correção:
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 suprimir avisos
É seguro suprimir esse aviso se você estiver usando uma implementação de IDictionary
que evite uma pesquisa de valor ao executar a verificaçãoIDictionary.ContainsKey
.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA1854
// The code that's violating the rule is on this line.
#pragma warning restore CA1854
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1854.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.