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.