Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
| 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.