CA1069: Los enumeradores no deben tener valores duplicados

Propiedad Value
Identificador de la regla CA1069
Título Los enumeradores no deben tener valores duplicados
Categoría Diseño
La corrección es problemática o no problemática Problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

Una enumeración tiene varios miembros a los que se les asigna explícitamente el mismo valor constante.

Descripción de la regla

Cada miembro de la enumeración debe tener un valor constante único o estar asignado explícitamente a un miembro anterior en la enumeración para indicar la intención explícita de compartir el valor. Por ejemplo:

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

Esta regla ayuda a detectar errores funcionales presentados en los escenarios siguientes:

  • Errores tipográficos accidentales, en los que el usuario escribió accidentalmente el mismo valor constante para varios miembros.
  • Errores de copia y pegado, en los que el usuario copió la definición de un miembro existente y, después, cambió el nombre del miembro, pero olvidó cambiar el valor.
  • Resolución de combinación de varias ramas, en las que se agregó un nuevo miembro con un nombre diferente, pero con el mismo valor en ramas diferentes.

Cómo corregir infracciones

Para corregir una infracción, asigne un nuevo valor constante único o asígnelo a un miembro anterior en la enumeración para indicar la intención explícita de compartir el mismo valor. Por ejemplo, el siguiente fragmento de código muestra una infracción de la regla y dos maneras de corregirla:

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
}

Cuándo suprimir las advertencias

No suprima las infracciones de esta regla.

Consulte también