在 C# 中處理多個物件時解決 CA2202 警告
由於可能重複 CryptoStream
調用,以下 C# 程式碼範例在 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中文網其他相關文章!