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