CA2201: Jangan munculkan jenis pengecualian yang dicadangkan
Properti | Nilai |
---|---|
ID Aturan | CA2201 |
Judul | Jangan menaikkan jenis pengecualian yang dipesan |
Golongan | Penggunaan |
Perbaikan bersifat disruptif atau non-disruptif | Merusak |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Metode meningkatkan jenis pengecualian yang terlalu umum atau yang dicadangkan oleh runtime.
Deskripsi aturan
Jenis pengecualian berikut terlalu umum untuk memberikan informasi yang memadai kepada pengguna:
Jenis pengecualian berikut dicadangkan dan harus dilemparkan hanya oleh runtime bahasa umum:
- System.AccessViolationException
- System.ExecutionEngineException
- System.IndexOutOfRangeException
- System.NullReferenceException
- System.OutOfMemoryException
- System.Runtime.InteropServices.COMException
- System.Runtime.InteropServices.ExternalException
- System.Runtime.InteropServices.SEHException
- System.StackOverflowException
Jangan melemparkan pengecualian umum
Jika Anda melemparkan jenis pengecualian umum, seperti Exception atau SystemException, dalam pustaka atau kerangka kerja, ini memaksa konsumen untuk menangkap semua pengecualian, termasuk pengecualian yang tidak diketahui yang tidak mereka ketahui cara menanganinya.
Sebagai gantinya, lemparkan jenis yang lebih turunan yang sudah ada dalam kerangka kerja, atau buat jenis Anda sendiri yang berasal dari Exception.
Melemparkan pengecualian tertentu
Tabel berikut menunjukkan pengecualian mana yang akan dilemparkan untuk berbagai jenis argumen yang tidak valid, termasuk parameter nilai di set
pengaktor properti.
Argumen tidak valid | Pengecualian |
---|---|
null referensi |
ArgumentNullException |
Di luar rentang nilai yang diizinkan (seperti indeks untuk koleksi atau daftar) | ArgumentOutOfRangeException |
Nilai tidak valid enum |
InvalidEnumArgumentException |
Berisi format yang tidak memenuhi spesifikasi parameter metode (seperti string format untuk ToString(String) ) |
FormatException |
Jika tidak, tidak valid | ArgumentException |
Tabel berikut ini memperlihatkan pengecualian mana yang akan dilemparkan untuk berbagai jenis operasi yang tidak valid.
Operasi tidak valid | Pengecualian |
---|---|
Operasi tidak valid untuk status objek saat ini. | InvalidOperationException |
Operasi dilakukan pada objek yang telah dibuang. | ObjectDisposedException |
Operasi tidak didukung (seperti ditimpa Stream.Write dalam aliran yang dibuka untuk dibaca). |
NotSupportedException |
Konversi akan mengakibatkan luapan (seperti dalam kelebihan beban operator cast eksplisit). | OverflowException |
Untuk semua situasi lainnya, pertimbangkan untuk membuat jenis Anda sendiri yang berasal dari Exception dan melemparkan itu.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, ubah jenis pengecualian yang dilemparkan ke jenis tertentu yang bukan salah satu jenis yang dipesan.
Kapan harus menekan peringatan
Jangan menyembunyikan peringatan dari aturan ini.