Partilhar via


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.

Consulte também