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.