Bagikan melalui


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 8 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. Misalnya:

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.

Baca juga