Rumah > pembangunan bahagian belakang > C++ > Bagaimana Mengendalikan Amaran CA2202: Pelupusan Berbilang Barangan Pakai dalam C#?

Bagaimana Mengendalikan Amaran CA2202: Pelupusan Berbilang Barangan Pakai dalam C#?

Barbara Streisand
Lepaskan: 2025-01-23 11:16:11
asal
279 orang telah melayarinya

How to Handle the CA2202 Warning: Multiple Disposal of Disposables in C#?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan