Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| 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 10 | 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.
Example
// This code violates the rule.
throw new Exception();
throw new NullReferenceException();
throw new IndexOutOfRangeException();
// ...
// This code satisfies the rule.
throw new ArgumentException();
throw new ArgumentNullException();
throw new InvalidOperationException();
// ...
// A minimal implementation of inheritance from Exception
public class CustomException : Exception { }
// Or create your own type that derives from Exception
// This code satisfies the rule too.
throw new CustomException();
Kapan harus menekan peringatan
Jangan menyembunyikan peringatan dari aturan ini.