CA1850: предпочесть статический HashData метод ComputeHash

Свойство Значение
Идентификатор правила CA1850
Заголовок Предпочесть статический HashData метод ComputeHash
Категория Производительность
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 Как предложение

Причина

Экземпляр типа, производного от HashAlgorithm, создается для вызова его метода ComputeHash, и этот тип имеет статический метод HashData.

Описание правила

Статические методы HashData появились в .NET 5 для следующих типов:

Эти методы позволяют упростить код в тех случаях, когда требуется только хэшировать данные.

Использование статических методов HashData эффективнее создания экземпляра HashAlgorithm и управления им для вызова ComputeHash.

Устранение нарушений

Как правило, вы можете исправить правило, изменив код, чтобы вызвать HashData и удалить использование экземпляра 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

Предыдущий код можно изменить для вызова статического метода HashData(Byte[]) напрямую.

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

Когда лучше отключить предупреждения

Вы можете безопасно скрыть предупреждения, связанные с этим правилом.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.

См. также