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