CA1069: Le enumerazioni non devono avere valori duplicati

Proprietà valore
ID regola CA1069
Title Le enumerazioni non devono contenere valori duplicati
Categoria Progettazione
Correzione che causa un'interruzione o un'interruzione Interruzione
Abilitato per impostazione predefinita in .NET 8 Come suggerimento

Causa

Un'enumerazione ha più membri a cui viene assegnato in modo esplicito lo stesso valore costante.

Descrizione regola

Ogni membro enum deve avere un valore costante univoco o essere assegnato in modo esplicito a un membro precedente nell'enumerazione per indicare la finalità esplicita di condivisione del valore. Ad esempio:

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.
}

Questa regola consente di rilevare i bug funzionali introdotti dagli scenari seguenti:

  • Errori di digitazione accidentali, in cui l'utente ha digitato accidentalmente lo stesso valore costante per più membri.
  • Copiare gli errori di incolla, in cui l'utente ha copiato una definizione di membro esistente, quindi ha rinominato il membro ma ha dimenticato di modificare il valore.
  • Risoluzione di merge da più rami, in cui è stato aggiunto un nuovo membro con un nome diverso ma lo stesso valore in rami diversi.

Come correggere le violazioni

Per correggere una violazione, assegnare un nuovo valore costante univoco o assegnarlo con un membro precedente nell'enumerazione per indicare la finalità esplicita di condividere lo stesso valore. Ad esempio, il frammento di codice seguente mostra una violazione della regola e due modi per correggere la violazione:

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 eliminare gli avvisi

Non eliminare le violazioni di questa regola.

Vedi anche