CA1069: Enums não deve ter valores duplicados
Property | valor |
---|---|
ID da regra | CA1069 |
Título | Enums não devem ter valores duplicados |
Categoria | Desenho |
A correção está quebrando ou não quebrando | Quebrando |
Habilitado por padrão no .NET 8 | Como sugestão |
Motivo
Uma enumeração tem vários membros aos quais é explicitamente atribuído o mesmo valor constante.
Descrição da regra
Cada membro do enum deve ter um valor constante único ou ser explicitamente atribuído a um membro anterior no enum para indicar a intenção explícita de compartilhar valor. Por exemplo:
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 regra ajuda a detetar bugs funcionais introduzidos nos seguintes cenários:
- Erros acidentais de digitação, onde o usuário digitou acidentalmente o mesmo valor constante para vários membros.
- Copiar erros de colagem, em que o usuário copiou uma definição de membro existente e, em seguida, renomeou o membro, mas esqueceu de alterar o valor.
- Resolução de mesclagem de várias ramificações, onde um novo membro foi adicionado com um nome diferente, mas o mesmo valor em ramificações diferentes.
Como corrigir violações
Para corrigir uma violação, atribua um novo valor constante exclusivo ou atribua com um membro anterior no enum para indicar a intenção explícita de compartilhar o mesmo valor. Por exemplo, o trecho de código a seguir mostra uma violação da regra e algumas maneiras de corrigir a violação:
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
}
Quando suprimir avisos
Não reprima violações desta regra.