Share via


CA1850: Föredrar statisk HashData metod framför ComputeHash

Property Värde
Regel-ID CA1850
Title Föredrar statisk HashData metod framför ComputeHash
Kategori Prestanda
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Som förslag

Orsak

En instans av en typ som härleds från HashAlgorithm skapas för att anropa dess ComputeHash metod och den typen har en statisk HashData metod.

Regelbeskrivning

Statiska HashData metoder introducerades i .NET 5 på följande typer:

De här metoderna förenklar koden i de fall där du bara vill hasha vissa data.

Det är mer effektivt att använda dessa statiska HashData metoder än att skapa och hantera en HashAlgorithm instans för att anropa ComputeHash.

Så här åtgärdar du överträdelser

I allmänhet kan du åtgärda regeln genom att ändra koden för att anropa HashData och ta bort användningen av instansen 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

Den tidigare koden kan ändras för att anropa den statiska HashData(Byte[]) metoden direkt.

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

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA1850
// The code that's violating the rule is on this line.
#pragma warning restore CA1850

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA1850.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även