Enumerationswerte nicht mit "Reserved" benennen

Aktualisiert: November 2007

     TypeName

DoNotNameEnumValuesReserved

CheckId

CA1700

Kategorie

Microsoft.Naming

Unterbrechende Änderung

Breaking

Ursache

Der Name eines Enumerationsmembers enthält das Wort "reserved".

Regelbeschreibung

Diese Regel setzt voraus, dass ein Enumerationsmember mit einem Namen, der "reserved" enthält, derzeit nicht verwendet wird, sondern ein Platzhalter ist, der in einer künftigen Version umbenannt oder entfernt werden soll. Das Umbenennen oder Entfernen eines Members ist eine unterbrechende Änderung. Sie sollten nicht erwarten, dass die Benutzer einen Member ignorieren, nur weil sein Name "reserved" enthält, und Sie können auch nicht davon ausgehen, dass die Benutzer die Dokumentation lesen oder sich danach richten. Da reservierte Member in Objektbrowsern und in intelligenten integrierten Entwicklungsumgebungen angezeigt werden, können sie zudem Unklarheiten in Bezug darauf hervorrufen, welche Member tatsächlich verwendet werden.

Statt einen reserved-Member zu verwenden, fügen Sie der Enumeration in der künftigen Version einen neuen Member hinzu. In den meisten Fällen stellt das Hinzufügen des neuen Members keine unterbrechende Änderung dar, solange hierdurch die Werte der ursprünglichen Member nicht geändert werden.

In bestimmten Fällen stellt das Hinzufügen eines Members eine unterbrechende Änderung dar, auch wenn die ursprünglichen Werte der ursprünglichen Member erhalten bleiben. Vor allem kann der neue Member von vorhandenen Codepfaden nicht ohne unterbrechende Aufrufer zurückgegeben werden, die eine switch-Anweisung (Select in Visual Basic) für den Rückgabewert verwenden, der die gesamte Memberliste umfasst, und die im Standardfall eine Ausnahme auslösen. Ein weiteres Problem ist, dass der Clientcode die Änderung im Verhalten von Reflektionsmethoden wie Enum.IsDefined eventuell nicht behandeln kann. Wenn also der neue Member von vorhandenen Methoden zurückgegeben werden muss oder wenn es eine bekannte Anwendungsinkompatibilität aufgrund schlechter Reflektionsverwendung gibt, besteht die einzige nicht unterbrechende Lösung dementsprechend darin, eine neue Enumeration hinzuzufügen, die die ursprünglichen und die neuen Member enthält, und die ursprüngliche Enumeration mit dem System.ObsoleteAttribute-Attribut zu markieren. Gehen Sie bei extern sichtbaren Typen oder Membern, die die ursprüngliche Enumeration verfügbar machen, auf die gleiche Weise vor.

Behandlung von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, müssen Sie den Member entfernen oder umbenennen.

Wann sollten Warnungen unterdrückt werden?

Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn der Member derzeit für zuvor veröffentlichte Bibliotheken verwendet wird.

Verwandte Regeln

Enumerationen nicht mit FlagsAttribute markieren

Keine Typnamen als Präfixe für Enumerationswerte verwenden

Der Enumerationsspeicher sollte Int32 sein

Enumerationen sollten einen Wert von 0 (null) aufweisen

Enumerationen mit FlagsAttribut markieren