Freigeben über


CA1069: Enumerationen dürfen keine doppelten Werte aufweisen.

Eigenschaft Wert
Regel-ID CA1069
Titel Enumerationen sollten keine doppelten Werte haben.
Kategorie Design
Fix führt zu Unterbrechungen oder bleibt funktionsfähig Eilmeldung
Standardmäßig in .NET 10 aktiviert Als Vorschlag
Anwendbare Sprachen C# und Visual Basic

Ursache

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

Regelbeschreibung

Jedes Enum-Mitglied sollte entweder einen eindeutigen Konstantenwert haben oder explizit einem vorherigen Enum-Mitglied zugewiesen werden, um die ausdrückliche Absicht des Teilens eines Wertes anzuzeigen. 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.
  • Das Zusammenführen von Auflösungen aus mehreren Verzweigungen, bei denen in verschiedenen Verzweigungen ein neues Mitglied mit einem anderen Namen, aber demselben Wert hinzugefügt wurde.

So beheben Sie Verstöße

Um einen Verstoß zu beheben, weisen Sie dem Member entweder einen neuen eindeutigen Konstantwert zu, oder ordnen Sie ihn einem früheren Enumerationsmember zu, um die explizite Absicht zu verdeutlichen, denselben Wert zu teilen. 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