CA1069: Enumerationen dürfen keine doppelten Werte aufweisen.

Eigenschaft Wert
Regel-ID CA1069
Titel Enumerationen dürfen keine doppelten Werte aufweisen.
Kategorie Design
Fix führt oder führt nicht zur Unterbrechung Breaking
Standardmäßig in .NET 8 aktiviert Als Vorschlag

Ursache

Eine Enumeration verfügt über mehrere Member, denen explizit derselbe Konstantwert zugewiesen wird.

Regelbeschreibung

Jeder Enumerationsmember sollte entweder einen eindeutigen Konstantwert aufweisen oder explizit einem früheren Enumerationsmember zugewiesen werden. Auf diese Weise ist eindeutig erkennbar, dass sie sich denselben Wert teilen sollen. Beispiel:

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

Diese Regel hilft beim Erfassen funktionaler Fehler, die aufgrund der folgenden Szenarien entstanden sind:

  • Versehentliche Tippfehler, bei denen der Benutzer versehentlich denselben Konstantwert für mehrere Member eingegeben hat.
  • Copy-Paste-Fehler, bei denen der Benutzer eine vorhandene Memberdefinition kopiert und den Member umbenannt hat, danach aber vergessen hat, den Wert zu ändern.
  • Zusammenführen mehrerer Verzweigungen, wenn ein neuer Member mit einem anderen Namen, aber mit dem gleichen Wert in verschiedenen Verzweigungen hinzugefügt wurde.

Behandeln von Verstößen

Um einen Verstoß zu beheben,müssen sie dem Member entweder einen neuen eindeutigen Konstantwert zuweisen, oder sie müssen ihn explizit einem früheren Enumerationsmember zuweisen, damit eindeutig erkennbar ist, dass sie sich denselben Wert teilen sollen. Der folgende Codeausschnitt zeigt beispielsweise einen Verstoß gegen die Regel und mehrere Korrekturmöglichkeiten:

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
}

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie die Verstöße gegen diese Regel nicht.

Siehe auch