Mengatasi Amaran CA2202 Apabila Melupuskan Berbilang Objek dalam C#
Contoh kod C# berikut menjana amaran CA2202 dalam Analisis Kod Visual Studio untuk CryptoStream
dan MemoryStream
disebabkan kemungkinan panggilan Dispose
berulang. Daripada pengubahsuaian kod, menyekat amaran ini ialah pendekatan yang disyorkan.
Menindas Amaran CA2202: Penyelesaian Pilihan
Memandangkan corak pelupusan objek yang konsisten dalam kod, menyekat amaran adalah lebih baik daripada mengubah kod. Kebimbangan berbilang panggilan Dispose
tidak berasas kerana kaedah IDisposable.Dispose
direka bentuk untuk menjadi idempoten (mengabaikan panggilan berikutnya selepas panggilan pertama). Kenyataan using
menangani perkara ini dengan elegan.
Berikut ialah cara untuk menyekat amaran:
<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>
Rasional Penindasan
Dokumentasi kaedah IDisposable.Dispose
secara eksplisit menyatakan bahawa panggilan di luar panggilan pertama diabaikan. Penyataan using
bersarang dalam kod mencipta senario di mana berbilang objek menguruskan pelupusan, namun ini dikendalikan dengan betul oleh rangka kerja. Oleh itu, amaran CA2202 tidak diperlukan dan boleh disekat dengan selamat.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Amaran CA2202 Apabila Melupuskan Pelbagai Objek dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!