Partilhar via


CA1069: Enums não devem ter valores duplicados

Propriedade valor
ID da regra CA1069
Título Enums não deve ter valores duplicados
Categoria Desenho
A correção causa interrupção ou não Interrupção
Habilitado por padrão no .NET 10 Como sugestão
Línguas aplicáveis C# e Visual Basic

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.
  • Erros de copiar e colar, em que o utilizador copiou uma definição de membro existente e, em seguida, renomeou o membro, mas esqueceu de alterar o valor.
  • Resolução de fusão de múltiplas ramificações, em que um novo membro foi adicionado com um nome diferente, mas com o mesmo valor em diferentes ramificações.

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