ホームページ >バックエンド開発 >C++ >C# で複数のオブジェクトを破棄するときに CA2202 警告を処理する方法は?

C# で複数のオブジェクトを破棄するときに CA2202 警告を処理する方法は?

DDD
DDDオリジナル
2025-01-23 11:07:12569ブラウズ

How to Handle CA2202 Warnings When Disposing Multiple Objects in C#?

C# で複数のオブジェクトを破棄する場合の CA2202 警告への対処

次の C# コード例では、CryptoStream 呼び出しが繰り返される可能性があるため、Visual Studio コード分析で MemoryStreamDispose に対して 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。