CA1069: Enum tidak boleh memiliki nilai duplikat

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.

Lihat juga