C# で複数のオブジェクトを破棄する場合の CA2202 警告への対処
次の C# コード例では、CryptoStream
呼び出しが繰り返される可能性があるため、Visual Studio コード分析で MemoryStream
と Dispose
に対して CA2202 警告が生成されます。 コードを変更する代わりに、これらの警告を抑制することをお勧めします。
CA2202 警告の抑制: 推奨される解決策
コード内の一貫したオブジェクト破棄パターンを考慮すると、コードを変更するよりも警告を抑制する方が望ましいでしょう。 Dispose
メソッドは冪等であるように設計されているため (最初の呼び出し以降の後続の呼び出しは無視されます)、複数の IDisposable.Dispose
呼び出しに関する懸念は根拠がありません。 using
ステートメントはこれをエレガントに処理します。
警告を抑制する方法は次のとおりです:
<code class="language-csharp">[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")] public static byte[] Encrypt(string data, byte[] key, byte[] iv) { using (var memoryStream = new MemoryStream()) { using (var cryptograph = new DESCryptoServiceProvider()) using (var cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write)) using (var streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Write(data); } return memoryStream.ToArray(); } }</code>
抑制の根拠
IDisposable.Dispose
メソッドのドキュメントには、最初の呼び出し以降の呼び出しは無視されると明示的に記載されています。 コード内のネストされた using
ステートメントは、複数のオブジェクトが破棄を管理するシナリオを作成しますが、これはフレームワークによって正しく処理されます。したがって、CA2202 警告は不要であり、安全に抑制できます。
以上がC# で複数のオブジェクトを破棄するときに CA2202 警告を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。