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