CA1069: Enumerações não devem ter valores duplicados
Property | Valor |
---|---|
ID da regra | CA1069 |
Título | Enumerações não devem ter valores duplicados |
Categoria | Projetar |
Correção interruptiva ou sem interrupção | Quebra |
Habilitado por padrão no .NET 9 | Como sugestão |
Causa
Uma enumeração tem diversos membros explicitamente atribuídos ao mesmo valor de constante.
Descrição da regra
Cada membro de enumeração deve ter um valor constante exclusivo ou ser explicitamente atribuído com um membro anterior na enumeração 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.
}
Essa regra ajuda a detectar bugs funcionais introduzidos nos seguintes cenários:
- Erros de digitação acidental, em que o usuário digitou acidentalmente o mesmo valor constante para vários membros.
- Erros de copiar e colar, em que o usuário copiou uma definição de membro existente e renomeou o membro, mas esqueceu de alterar o valor.
- Mesclar a resolução de vários branches, em que um novo membro foi adicionado com um nome diferente, mas o mesmo valor em branches diferentes.
Como corrigir violações
Para corrigir uma violação, atribua um novo valor constante exclusivo ou atribua com um membro anterior na enumeração para indicar a intenção explícita de compartilhar o mesmo valor. Por exemplo, o snippet 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 suprima as violações dessa regra.