Partage via


CA1069 : Les enums ne doivent pas avoir de valeurs en double

Propriété Value
Identificateur de la règle CA1069
Titre Les enums ne doivent pas avoir de valeurs en double
Catégorie Conception
Le correctif est cassant ou non cassant Rupture
Activé par défaut dans .NET 8 À titre de suggestion

Cause

Une énumération a plusieurs membres qui sont explicitement affectés à la même valeur constante.

Description de la règle

Chaque membre d’énumération doit avoir une valeur constante unique ou être explicitement affecté à un membre précédent dans l’énumération pour indiquer l’intention explicite de partager la valeur. Par exemple :

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.
}

Cette règle permet d’intercepter les bogues fonctionnels introduits par les scénarios suivants :

  • Erreurs de frappe accidentelles, où l’utilisateur a accidentellement tapé la même valeur constante pour plusieurs membres.
  • Copier-coller d’erreurs, où l’utilisateur a copié une définition de membre existante, puis renommé le membre mais oublié de modifier la valeur.
  • Résolution de fusion à partir de plusieurs branches, où un nouveau membre a été ajouté avec un nom différent, mais la même valeur dans différentes branches.

Comment corriger les violations

Pour corriger une violation, affectez une nouvelle valeur de constante unique, ou affectez avec un membre antérieur dans l’énumération pour indiquer l’intention explicite de partager la même valeur. Par exemple, l’extrait de code suivant montre une violation de la règle et deux façons de corriger la violation :

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
}

Quand supprimer les avertissements

Ne supprimez pas les violations de cette règle.

Voir aussi