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