Compartilhar via


CA1069: Enumerações não devem ter valores duplicados

Propriedade Valor
ID da regra CA1069
Título Enumerações não devem ter valores duplicados
Categoria Design
Correção interruptiva ou sem interrupção Interrupção
Habilitado por padrão no .NET 10 Como sugestão
Idiomas aplicáveis C# e Visual Basic

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 resolução de múltiplos branches, onde um novo membro foi adicionado com um nome diferente, mas com 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.

Confira também