Delen via


CA1069: Enums mogen geen dubbele waarden hebben

Eigenschap Waarde
Regel-id CA1069
Titel Opsommingen mogen geen dubbele waarden hebben
Categorie Ontwerpen
Fix kan brekend of niet-brekend zijn Onderbreking
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

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 dezelfde waarde krijgen toegewezen als een eerder lid in de enum om de bedoeling van het delen te benadrukken. 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 en samenvoeging van meerdere vertakkingen, waarbij een nieuw element is toegevoegd met een andere naam, maar dezelfde waarde in verschillende vertakkingen.

Hoe schendingen op te lossen

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