CA2202 警告: 使い捨てオブジェクトの複数の処理
CA2202 警告は、オブジェクトが同じメソッド内で複数回破棄されたことをコード分析ツールが検出したときにトリガーされます。これにより、null 参照例外などの潜在的な問題が発生する可能性があります。
提供されたコード内:
<code class="language-csharp">public static byte[] Encrypt(string data, byte[] key, byte[] iv) { using (MemoryStream memoryStream = new MemoryStream()) { using (DESCryptoServiceProvider cryptograph = new DESCryptoServiceProvider()) { using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write)) { using (StreamWriter streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Write(data); } } } return memoryStream.ToArray(); } }</code>
この警告がトリガーされるインスタンスは複数あります。 using
ブロック内で MemoryStream
、DESCryptoServiceProvider
、CryptoStream
、および StreamWriter
を使用すると、コード分析ツールは、それらが 34 行目で複数回処理されることを識別します。この問題を解決するには、この場合の警告を抑制します。
この警告を抑制する理由は、コードが使い捨てオブジェクトを一貫して処理するためです。他のクラスは、作成された使い捨てオブジェクトを所有し、それに対して Dispose
を呼び出すこともできます。この場合、複数の廃棄を心配する必要はありません。この警告は、[SuppressMessage]
属性をメソッドに適用することで無視できます:
<code class="language-csharp">[SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")] public static byte[] Encrypt(string data, byte[] key, byte[] iv) { // 代码保持不变 }</code>
あるいは、IDisposable.Dispose
オブジェクトは後続の破棄呼び出しを無視する必要があるとドキュメントに明示的に記載されているため、CA2202 ルールは不要であると主張することもできます。したがって、プロジェクト全体に対してこの警告を抑制することが適切な場合があります。ただし、コードが Dispose
の欠陥のある実装に依存しないように注意する必要があります。これは CA1065 警告を使用して検出できます。
以上がCA2202 警告: C# での使い捨てアイテムの複数の破棄に対処する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。