Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
| Property | valor |
|---|---|
| ID da regra | CA1864 |
| Título | Prefira o método 'IDictionary.TryAdd(TKey, TValue)' |
| Categoria | Desempenho |
| A correção está quebrando ou não quebrando | Sem quebra |
| Habilitado por padrão no .NET 10 | Como sugestão |
Motivo
Dictionary<TKey,TValue>.Add é guardado por uma Dictionary<TKey,TValue>.ContainsKey(TKey) chamada.
Descrição da regra
Ambos Dictionary<TKey,TValue>.ContainsKey(TKey) e Dictionary<TKey,TValue>.Add realizar uma pesquisa, que é redundante.
Dictionary<TKey,TValue>.Add também lança uma exceção se a chave já estiver presente no dicionário. É mais eficiente chamar Dictionary<TKey,TValue>.TryAdd, que retorna um valor booleano que indica se o valor foi adicionado ou não.
TryAdd não substitui o valor da chave se ela já estiver presente.
Como corrigir violações
Substitua uma chamada seguida Dictionary<TKey,TValue>.ContainsKey(TKey) por uma chamada para Dictionary<TKey,TValue>.Add por uma única chamada para Dictionary<TKey,TValue>.TryAdd.
Exemplo
O trecho de código a seguir mostra uma violação de CA1864:
void Run(IDictionary<int, string> dictionary)
{
if (!dictionary.ContainsKey(2))
{
dictionary.Add(2, "Hello World");
}
}
Sub Run(dictionary As IDictionary(Of Integer, String))
If Not dictionary.ContainsKey(2) Then
dictionary.Add(2, "Hello World")
End If
End Sub
O trecho de código a seguir corrige a violação:
void Run(IDictionary<int, string> dictionary)
{
dictionary.TryAdd(2, "Hello World");
}
Sub Run(dictionary As IDictionary(Of Integer, String))
dictionary.TryAdd(2, "Hello World")
End Sub
Quando suprimir avisos
É seguro suprimir esse aviso se o desempenho não for uma preocupação e se você lidar com a exceção que pode ser lançada pelo Dictionary<TKey,TValue>.Add.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.
#pragma warning disable CA1864
// The code that's violating the rule is on this line.
#pragma warning restore CA1864
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA1864.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.