Amaran CA2202: pemprosesan berbilang objek pakai buang
Amaran CA2202 dicetuskan apabila alat analisis kod mengesan bahawa objek dilupuskan beberapa kali dalam kaedah yang sama. Ini boleh membawa kepada masalah yang berpotensi seperti pengecualian rujukan nol.
Dalam kod yang disediakan:
<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>
Terdapat beberapa kejadian amaran ini dicetuskan. Apabila menggunakan using
, MemoryStream
, DESCryptoServiceProvider
dan CryptoStream
dalam blok StreamWriter
, alat analisis kod akan mengenal pasti bahawa ia diproses beberapa kali pada baris 34. Untuk menyelesaikan masalah ini, kita boleh menyekat amaran dalam kes ini.
Sebab untuk menyekat amaran ini ialah kod tersebut mengendalikan objek pakai buang secara konsisten. Kelas lain mungkin memiliki objek pakai buang yang dicipta dan memanggil Dispose
padanya juga. Dalam kes ini, tidak perlu risau tentang pelbagai pelupusan. Amaran ini boleh diabaikan dengan menggunakan atribut [SuppressMessage]
pada kaedah:
<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>
Sebagai alternatif, boleh dikatakan bahawa peraturan CA2202 adalah tidak diperlukan, kerana IDisposable.Dispose
dokumentasi secara eksplisit menyatakan bahawa objek harus mengabaikan panggilan pelupusan berikutnya. Oleh itu, mungkin wajar untuk menyekat amaran ini untuk keseluruhan projek. Walau bagaimanapun, pertimbangan yang teliti harus dibuat untuk memastikan bahawa kod tidak bergantung pada pelaksanaan yang rosak Dispose
, yang boleh dikesan menggunakan amaran CA1065.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Amaran CA2202: Pelupusan Berbilang Barangan Pakai dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!