Rumah > pembangunan bahagian belakang > C++ > Bagaimana Mengendalikan Amaran CA2202 Dengan Berkesan Apabila Membuang Pelbagai Objek dalam C#?

Bagaimana Mengendalikan Amaran CA2202 Dengan Berkesan Apabila Membuang Pelbagai Objek dalam C#?

Patricia Arquette
Lepaskan: 2025-01-23 11:11:09
asal
218 orang telah melayarinya

How to Effectively Handle CA2202 Warnings When Disposing of Multiple Objects in C#?

Sekat amaran CA2202 untuk objek pakai buang

Alat analisis kod CA2202 membenderakan kemungkinan isu yang menyebabkan objek dilupuskan beberapa kali, yang berpotensi mengakibatkan ralat ObjectDisposedException. Amaran ini biasanya berlaku apabila menggunakan objek pakai buang bersarang, seperti yang ditunjukkan dalam kod berikut:

<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

Dalam kes ini, CA2202 akan memberi amaran bahawa memoryStream dan cryptoStream diproses beberapa kali. Untuk menyelesaikan amaran ini, anda boleh menyekatnya secara pilihan, seperti yang ditunjukkan dalam penyelesaian yang disediakan:

<code class="language-csharp">[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>
Salin selepas log masuk

Penindasan menyediakan cara untuk mengesahkan bahawa amaran dianggap tidak penting atau tidak betul dalam konteks kod tertentu. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa kod itu secara teknikalnya masih melibatkan pelbagai pelupusan, yang boleh menyebabkan masalah jika pelaksanaan objek pakai buang gagal.

Selain penindasan, pendekatan lain ialah memfaktorkan semula kod untuk menghapuskan pelupusan tambahan dan memastikan setiap objek hanya dilupuskan sekali:

<code class="language-csharp">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>
Salin selepas log masuk

Ini menghapuskan amaran tanpa mengorbankan tingkah laku yang dijangkakan atau memperkenalkan sebarang kemungkinan pengecualian. Walau bagaimanapun, pendekatan pilihan akhirnya bergantung pada keperluan khusus dan konteks asas kod anda.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Amaran CA2202 Dengan Berkesan Apabila Membuang Pelbagai Objek 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