CA1850: 静的な HashData メソッドは ComputeHash に優先します

プロパティ
ルール ID CA1850
Title 静的な HashData メソッドは ComputeHash に優先します
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

HashAlgorithm から派生した型のインスタンスが、その ComputeHash メソッドを呼び出すために作成され、その型には静的な HashData メソッドがあります。

規則の説明

静的な HashData メソッドは、.NET 5 で次の型に導入されました。

これらのメソッドは、一部のデータをハッシュするだけの場合にコードを簡略化するのに役立ちます。

ComputeHash を呼び出す HashAlgorithm インスタンスを作成および管理するよりも、静的 HashData メソッドを使用する方が効率的です。

違反の修正方法

一般に、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

詳細については、「コード分析の警告を抑制する方法」を参照してください。

関連項目