Compartilhar via


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 8 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.