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 | CA1069 |
| Judul | Enum tidak boleh memiliki nilai duplikat |
| Kategori | Desain |
| Perbaikan bersifat merusak atau tidak merusak | Merusak |
| Diaktifkan secara default di .NET 10 | Sebagai saran |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Enumerasi memiliki beberapa anggota yang secara eksplisit diberi nilai konstanta yang sama.
Deskripsi aturan
Setiap anggota enum harus memiliki nilai konstanta unik atau secara eksplisit ditetapkan dengan anggota sebelumnya dalam enum untuk menunjukkan niat eksplisit berbagi nilai. Contohnya:
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = 2, // CA1069: This is not fine. Either assign a different constant value or 'Field2' to indicate explicit intent of sharing value.
}
Aturan ini membantu dalam menangkap bug fungsional yang diperkenalkan dari skenario berikut:
- Kesalahan pengetikan yang tidak disengaja, di mana pengguna secara tidak sengaja mengetikkan nilai konstanta yang sama untuk beberapa anggota.
- Kesalahan salin-tempel, di mana pengguna menyalin definisi anggota yang ada, kemudian mengganti nama anggota tetapi lupa mengubah nilainya.
- Gabungkan resolusi dari beberapa cabang, di mana anggota baru ditambahkan dengan nama yang berbeda tetapi nilai yang sama di cabang yang berbeda.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran, tetapkan nilai konstanta unik baru atau tetapkan dengan anggota sebelumnya dalam enum untuk menunjukkan niat eksplisit untuk berbagi nilai yang sama. Misalnya, cuplikan kode berikut menunjukkan pelanggaran aturan dan beberapa cara untuk memperbaiki pelanggaran:
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = 2, // CA1069: This is not fine. Either assign a different constant value or 'Field2' to indicate explicit intent of sharing value.
}
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = 3, // This is now fine
}
enum E
{
Field1 = 1,
AnotherNameForField1 = Field1, // This is fine
Field2 = 2,
Field3 = Field2, // This is also fine
}
Kapan harus menekan peringatan
Jangan mengabaikan pelanggaran aturan ini.