CA1069: Enum tidak boleh memiliki nilai duplikat
Properti | Nilai |
---|---|
ID Aturan | CA1069 |
Judul | Enum tidak boleh memiliki nilai duplikat |
Golongan | Desain |
Perbaikan bersifat disruptif atau non-disruptif | Merusak |
Diaktifkan secara default di .NET 9 | Sebagai saran |
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.
- Salin kesalahan tempel, di mana pengguna menyalin definisi anggota yang ada, lalu mengganti nama anggota tetapi lupa mengubah nilai.
- 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 menekan pelanggaran aturan ini.