CA1850: preferir o método estático HashData em vez de ComputeHash

Property Valor
ID da regra CA1850
Título Prefira o método estático HashData ao ComputeHash
Categoria Desempenho
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Como sugestão

Causa

Uma instância de um tipo derivado de HashAlgorithm é criada para chamar o método ComputeHash e esse tipo possui um método estático HashData.

Descrição da regra

Os métodos estáticos HashData foram introduzidos no .NET 5 nos seguintes tipos:

Esses métodos ajudam a simplificar o código nos casos em que você deseja apenas aplicar hash a alguns dados.

É mais eficiente usar esses métodos estáticos HashData do que criar e gerenciar uma instância HashAlgorithm para chamar ComputeHash.

Como corrigir violações

Em geral, é possível corrigir a regra alterando o código para chamar HashData e remover o uso da instância HashAlgorithm.

public bool CheckHash(byte[] buffer)
{
  using (var sha256 = SHA256.Create())
  {
    byte[] digest = sha256.ComputeHash(buffer);
    return DoesHashExist(digest);
  }
}
Public Function CheckHash(buffer As Byte()) As Boolean
  Using sha256 As SHA256 = SHA256.Create()
    Dim digest As Byte() = sha256.ComputeHash(buffer)
    Return DoesHashExist(digest)
  End Using
End Function

O código anterior pode ser alterado para chamar o método estático HashData(Byte[]) diretamente.

public bool CheckHash(byte[] buffer)
{
    byte[] digest = SHA256.HashData(buffer);
    return DoesHashExist(digest);
}
Public Function CheckHash(buffer As Byte()) As Boolean
  Dim digest As Byte() = SHA256.HashData(buffer)
  Return DoesHashExist(digest)
End Function

Quando suprimir avisos

É seguro suprimir um aviso dessa regra.

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 CA1850
// The code that's violating the rule is on this line.
#pragma warning restore CA1850

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.CA1850.severity = none

Para obter mais informações, confira Como suprimir avisos de análise de código.

Confira também