Delen via


CA1069: Enums mogen geen dubbele waarden hebben

Eigenschappen Weergegeven als
Regel-id CA1069
Titel Opsommingen mogen geen dubbele waarden hebben
Categorie Ontwerpen
Oplossing is brekend of niet-brekend Breken
Standaard ingeschakeld in .NET 8 Als suggestie

Oorzaak

Een opsomming heeft meerdere leden die expliciet dezelfde constante waarde hebben toegewezen.

Beschrijving van regel

Elk enum-lid moet een unieke constante waarde hebben of expliciet worden toegewezen aan een eerder lid in de enum om expliciete intentie van de waarde voor delen aan te geven. Voorbeeld:

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

Deze regel helpt bij het ondervangen van functionele bugs die zijn geïntroduceerd in de volgende scenario's:

  • Per ongeluk typfouten, waarbij de gebruiker per ongeluk dezelfde constante waarde voor meerdere leden heeft getypt.
  • Kopieer plakfouten, waarbij de gebruiker een bestaande liddefinitie heeft gekopieerd en vervolgens de naam van het lid heeft gewijzigd, maar vergeten de waarde te wijzigen.
  • Oplossing van meerdere vertakkingen samenvoegen, waarbij een nieuw lid is toegevoegd met een andere naam, maar dezelfde waarde in verschillende vertakkingen.

Schendingen oplossen

Als u een schending wilt oplossen, wijst u een nieuwe unieke constante waarde toe of wijst u deze toe met een eerder lid in de enum om aan te geven dat de expliciete intentie van het delen van dezelfde waarde is. In het volgende codefragment ziet u bijvoorbeeld een schending van de regel en een aantal manieren om de schending op te lossen:

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
}

Wanneer waarschuwingen onderdrukken

Schendingen van deze regel niet onderdrukken.

Zie ook