使い捨てオブジェクトに対する CA2202 警告を抑制します
コード分析ツール CA2202 は、オブジェクトが複数回破棄され、ObjectDisposedException
エラーが発生する可能性がある問題にフラグを立てます。この警告は通常、次のコードに示すように、ネストされた使い捨てオブジェクトを使用するときに発生します。
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(); } }
と memoryStream
が複数回処理されることを警告します。これらの警告を解決するには、提供されている解決策に示すように、オプションで警告を抑制できます: cryptoStream
[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(); } }
抑制に加えて、コードをリファクタリングして余分な破棄を排除し、各オブジェクトが 1 回だけ破棄されるようにするという別のアプローチもあります。
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(); }
以上がC# で複数のオブジェクトを破棄するときに CA2202 警告を効果的に処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。