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.