Enum Klasse
TOC
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Enum-Klasse

 

Stellt die Basisklasse für Enumerationen bereit.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)


[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Enum : ValueType, IComparable, IFormattable, 
	IConvertible

NameBeschreibung
System_CAPS_protmethodEnum()

Initialisiert eine neue Instanz der Enum-Klasse.

NameBeschreibung
System_CAPS_pubmethodCompareTo(Object)

Vergleicht diese Instanz mit einem angegebenen Objekt und gibt eine Angabe über das Verhältnis der entsprechenden Werte zurück.

System_CAPS_pubmethodEquals(Object)

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.(Setzt "ValueType.Equals(Object)" außer Kraft.)

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Geerbt von Object.)

System_CAPS_pubmethodSystem_CAPS_staticFormat(Type, Object, String)

Konvertiert den angegebenen Wert eines angegebenen Enumerationstyps unter Berücksichtigung des angegebenen Formats in die entsprechende Zeichenfolgendarstellung.

System_CAPS_pubmethodGetHashCode()

Gibt den Hashcode für den Wert dieser Instanz zurück.(Setzt "ValueType.GetHashCode()" außer Kraft.)

System_CAPS_pubmethodSystem_CAPS_staticGetName(Type, Object)

Ruft den Namen der Konstanten in der angegebenen Enumeration mit dem angegebenen Wert ab.

System_CAPS_pubmethodSystem_CAPS_staticGetNames(Type)

Ruft ein Array mit den Namen der Konstanten in einer angegebenen Enumeration ab.

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von Object.)

System_CAPS_pubmethodGetTypeCode()

Gibt den Typcode des zugrunde liegenden Typs dieses Enumerationsmembers zurück.

System_CAPS_pubmethodSystem_CAPS_staticGetUnderlyingType(Type)

Gibt den zugrunde liegenden Typ der angegebenen Enumeration zurück.

System_CAPS_pubmethodSystem_CAPS_staticGetValues(Type)

Ruft ein Array mit den Werten der Konstanten in einer angegebenen Enumeration ab.

System_CAPS_pubmethodHasFlag(Enum)

Bestimmt, ob ein oder mehrere Bitfelder in der aktuellen Instanz festgelegt werden.

System_CAPS_pubmethodSystem_CAPS_staticIsDefined(Type, Object)

Gibt eine Angabe darüber zurück, ob eine angegebene Enumeration eine Konstante mit einem angegebenen Wert enthält.

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von Object.)

System_CAPS_pubmethodSystem_CAPS_staticParse(Type, String)

Konvertiert die Zeichenfolgendarstellung des Namens oder des numerischen Werts einer oder mehrerer Enumerationskonstanten in ein entsprechendes Enumerationsobjekt.

System_CAPS_pubmethodSystem_CAPS_staticParse(Type, String, Boolean)

Konvertiert die Zeichenfolgendarstellung des Namens oder des numerischen Werts einer oder mehrerer Enumerationskonstanten in ein entsprechendes Enumerationsobjekt. Ein Parameter gibt an, ob beim Vorgang die Groß-/Kleinschreibung nicht beachtet wird.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Byte)

Konvertiert die angegebene 8-Bit-Ganzzahl ohne Vorzeichen in einen Enumerationsmember.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Int16)

Konvertiert die angegebene 16-Bit-Ganzzahl mit Vorzeichen in einen Enumerationsmember.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Int32)

Konvertiert die angegebene 32-Bit-Ganzzahl mit Vorzeichen in einen Enumerationsmember.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Int64)

Konvertiert die angegebene 64-Bit-Ganzzahl mit Vorzeichen in einen Enumerationsmember.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Object)

Konvertiert das angegebene Objekt mit einem ganzzahligen Wert in einen Enumerationsmember.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, SByte)

Konvertiert den angegebenen Wert einer 8-Bit-Ganzzahl mit Vorzeichen in einen Enumerationsmember.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, UInt16)

Konvertiert den angegebenen Wert einer 16-Bit-Ganzzahl ohne Vorzeichen in einen Enumerationsmember.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, UInt32)

Konvertiert den angegebenen Wert einer 32-Bit-Ganzzahl ohne Vorzeichen in einen Enumerationsmember.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, UInt64)

Konvertiert den angegebenen Wert einer 64-Bit-Ganzzahl ohne Vorzeichen in einen Enumerationsmember.

System_CAPS_pubmethodToString()

Konvertiert den Wert dieser Instanz in die entsprechende Zeichenfolgendarstellung.(Setzt "ValueType.ToString()" außer Kraft.)

System_CAPS_pubmethodToString(IFormatProvider)

Veraltet.Diese Methodenüberladung ist veraltet. Verwenden Sie Enum.ToString().

System_CAPS_pubmethodToString(String)

Konvertiert den Wert dieser Instanz anhand des angegebenen Formats in die entsprechende Zeichenfolgendarstellung.

System_CAPS_pubmethodToString(String, IFormatProvider)

Veraltet.Diese Methodenüberladung ist veraltet. Verwenden Sie Enum.ToString(String).

System_CAPS_pubmethodSystem_CAPS_staticTryParse<TEnum>(String, TEnum)

Konvertiert die Zeichenfolgendarstellung des Namens oder des numerischen Werts einer oder mehrerer Enumerationskonstanten in ein entsprechendes Enumerationsobjekt. Der Rückgabewert gibt an, ob die Konvertierung erfolgreich abgeschlossen wurde.

System_CAPS_pubmethodSystem_CAPS_staticTryParse<TEnum>(String, Boolean, TEnum)

Konvertiert die Zeichenfolgendarstellung des Namens oder des numerischen Werts einer oder mehrerer Enumerationskonstanten in ein entsprechendes Enumerationsobjekt. Ein Parameter gibt an, ob beim Vorgang die Groß-/Kleinschreibung beachtet wird. Der Rückgabewert gibt an, ob die Konvertierung erfolgreich abgeschlossen wurde.

NameBeschreibung
System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToBoolean(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in einen booleschen Wert.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToByte(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine 8-Bit-Ganzzahl ohne Vorzeichen.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToChar(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in ein Unicode-Zeichen.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDateTime(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine DateTime.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDecimal(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine Decimal.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDouble(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine Gleitkommazahl mit doppelter Genauigkeit.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt16(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine 16-Bit-Ganzzahl mit Vorzeichen.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt32(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine 32-Bit-Ganzzahl mit Vorzeichen.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt64(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine 64-Bit-Ganzzahl mit Vorzeichen.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSByte(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine 8-Bit-Ganzzahl mit Vorzeichen.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSingle(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine Gleitkommazahl mit einfacher Genauigkeit.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToType(Type, IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in einen angegebenen Typ.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt16(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine 16-Bit-Ganzzahl ohne Vorzeichen.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt32(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine 32-Bit-Ganzzahl ohne Vorzeichen.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt64(IFormatProvider)

Diese API unterstützt die producto-Infrastruktur und sollte nicht direkt aus Ihrem Code verwendet werden. Konvertiert den aktuellen Wert auf Grundlage des zugrunde liegenden Typs in eine 64-Bit-Ganzzahl ohne Vorzeichen.

Eine Enumeration ist ein Satz von benannten Konstanten, deren zugrunde liegende Typ einen beliebigen ganzzahligen Typ ist. Wenn kein zugrunde liegender Typ explizit deklariert wird, Int32 verwendet wird. Enum ist die Basisklasse für alle Enumerationen in .NET Framework. Enumerationstypen werden definiert, indem die enum -Schlüsselwort in c# und die Enum...End Enum in Visual Basic erstellen.

Enum Stellt Methoden zum Vergleichen von Instanzen dieser Klasse, Konvertieren des Werts einer Instanz in die Stringdarstellung, konvertieren die Darstellung einer Zahl in eine Instanz dieser Klasse und erstellen eine Instanz einer angegebenen Enumeration und Wert.

Sie können auch eine Enumeration als Bitfeld behandelt werden. Weitere Informationen finden Sie unter den nicht ausschließliche Member und das Flags-Attribut Abschnitt und FlagsAttribute Thema.

Programmiersprachen stellen üblicherweise die Syntax zum Deklarieren einer Enumeration, die aus einer Reihe von benannten Konstanten und deren Werten besteht. Das folgende Beispiel veranschaulicht die Syntax von c# und Visual Basic verwendet werden, um eine Enumeration zu definieren. Erstellt eine Enumeration mit dem Namen ArrivalStatus die hat drei Member: ArrivalStatus.Early, ArrivalStatus.OnTime, und ArrivalStatus.Late. Beachten Sie, dass in beiden Fällen wird die Enumeration nicht explizit von erbt Enum; die vererbungsbeziehung wird vom Compiler implizit behandelt.

public enum ArrivalStatus { Late=-1, OnTime=0, Early=1 };
System_CAPS_warningWarnung

Erstellen Sie nie einen Enumerationstyp, dessen zugrunde liegender Typ keine ganze Zahl ist, oder Char. Obwohl Sie solch einen Enumerationstyp mit Reflektion erstellen können, Methodenaufrufe, die den resultierenden Typ verwenden, unzuverlässig und auch zusätzliche Ausnahmen auslösen.

Sie können einen Enumerationstyp instanziieren, genauso, wie Sie einen beliebigen anderen Werttyp instanziieren: durch eine Variable deklarieren und eine der Konstanten der Enumeration zugewiesen. Im folgenden Beispiel wird ein ArrivalStatus dessen Wert ArrivalStatus.OnTime.

public class Example
{
   public static void Main()
   {
      ArrivalStatus status = ArrivalStatus.OnTime;
      Console.WriteLine("Arrival Status: {0} ({0:D})", status);
   }
}
// The example displays the following output:
//       Arrival Status: OnTime (0)

Sie können auch auf folgende Weise einen Enumerationswert instanziieren:

  • Mithilfe von Funktionen einer bestimmten Programmiersprache umgewandelt (in c#) oder konvertieren (wie in Visual Basic) einen ganzzahligen Wert in einen Enumerationswert. Das folgende Beispiel erstellt ein ArrivalStatus Objekt, dessen Wert ArrivalStatus.Early auf diese Weise.

    ArrivalStatus status2 = (ArrivalStatus) 1;
    Console.WriteLine("Arrival Status: {0} ({0:D})", status2);
    // The example displays the following output:
    //       Arrival Status: Early (1)
    
  • Durch Aufrufen der impliziten Standardkonstruktor. Wie im folgenden Beispiel wird gezeigt, ist in diesem Fall der zugrunde liegende Wert der Enumerationsinstanz 0. Dies ist jedoch nicht unbedingt den Wert einer gültigen Konstante in der Enumeration.

    ArrivalStatus status1 = new ArrivalStatus();
    Console.WriteLine("Arrival Status: {0} ({0:D})", status1);
    // The example displays the following output:
    //       Arrival Status: OnTime (0)
    
  • Durch Aufrufen der Parse oder TryParse<TEnum> Methode zum Analysieren einer Zeichenfolge, die den Namen einer Konstante in der Enumeration enthält. Weitere Informationen finden Sie unter der Analyse von Enumerationswerten Abschnitt.

  • Durch Aufrufen der ToObject Methode, um einen ganzzahligen Wert in einen Enumerationstyp konvertieren. Weitere Informationen finden Sie unter der Konvertierungen ausführen Abschnitt.

Es wird empfohlen, dass Sie die folgenden bewährten Methoden verwenden, wenn Sie Enumerationstypen definieren:

  • Wenn Sie kein Member einer Enumeration definiert haben, deren Wert 0 ist, sollten Sie erstellen eine None Enumerationskonstante. Der für die Enumeration verwendete Speicher wird standardmäßig mit 0 initialisiert wird von der common Language Runtime. Daher, wenn Sie keine Konstante definieren, deren Wert 0 (null) ist, wird die Enumeration einen ungültigen Wert enthalten bei der Erstellung.

  • Es ist ein offensichtlicher Standardfall, die Ihre Anwendung darstellen, sollten eine Enumerationskonstante ist konstant, deren Wert 0 (null) für die Darstellung. Wenn kein solcher Fall vorhanden ist, sollten erwägen Sie, eine Enumerationskonstante, deren Wert 0 (null) an, die nicht dargestellt wird die Groß-/Kleinschreibung von keiner anderen Enumerationskonstanten zu verwenden.

  • Geben Sie keine Enumerationskonstanten an, die für die zukünftige Verwendung reserviert sind.

  • Beim Definieren einer Methode oder Eigenschaft, die eine Enumerationskonstante als Wert akzeptiert, sollten Sie die Überprüfung des Werts. Der Grund ist, dass Sie einen numerischen Wert in den Enumerationstyp umwandeln können, selbst wenn diese numerische Wert in der Enumeration definiert ist.

Best Practices für Enumerationstypen, deren Konstanten Bitfelder sind, in aufgelisteten der nicht ausschließliche Member und das Flags-Attribut Abschnitt.

Sie können keine neue Methoden definieren, bei der Erstellung einer Enumeration. Ein Enumerationstyp erbt jedoch einen vollständigen Satz von statischen Methoden und Instanzenmethoden von der Enum Klasse. Die folgenden Abschnitte untersuchen die meisten dieser Methoden, zusätzlich zu anderen Methoden, die häufig verwendet werden, bei der Arbeit mit Enumerationswerte.

Sie können Member einer Enumeration zugrunde liegenden Typ konvertieren und mithilfe einer Umwandlung (in c#) oder ein Konvertierungsoperator (in Visual Basic). Im folgenden Beispiel wird die Umwandlung oder Konvertierung Operatoren zum Durchführen von Konvertierungen von einer Ganzzahl in einen Enumerationswert sowohl über einen Enumerationswert in eine ganze Zahl.

int value3 = 2;
ArrivalStatus status3 = (ArrivalStatus) value3;

int value4 = (int) status3;

Die Enum -Klasse enthält zudem eine ToObject Methode, die einen Wert eines beliebigen ganzzahligen Typs in einen Enumerationswert konvertiert. Im folgenden Beispiel wird die ToObject(Type, Int32) -Methode zum Konvertieren einer Int32 zu einer ArrivalStatus Wert. Beachten Sie, dass, da die ToObject Gibt einen Wert vom Typ Object, die Verwendung eines Operators Umwandlung oder Konvertierung möglicherweise müssen Sie das Objekt in den Enumerationstyp umgewandelt.

int number = -1;
ArrivalStatus arrived = (ArrivalStatus) ArrivalStatus.ToObject(typeof(ArrivalStatus), number);

Bei der Konvertierung einer ganze Zahl in einen Enumerationswert ist es möglich, einen Wert zuzuweisen, der nicht tatsächlich ein Member der Enumeration ist. Um dies zu verhindern, können Sie die ganze Zahl, übergeben die IsDefined -Methode vor dem Ausführen der Konvertierung. Im folgenden Beispiel wird diese Methode, um zu bestimmen, ob die Elemente in einem Array von ganzzahligen Werten konvertiert werden können ArrivalStatus Werte.

using System;

public enum ArrivalStatus { Unknown=-3, Late=-1, OnTime=0, Early=1 };

public class Example
{
   public static void Main()
   {
      int[] values = { -3, -1, 0, 1, 5, Int32.MaxValue };
      foreach (var value in values)
      {
         ArrivalStatus status;
         if (Enum.IsDefined(typeof(ArrivalStatus), value))
            status = (ArrivalStatus) value;
         else
            status = ArrivalStatus.Unknown;
         Console.WriteLine("Converted {0:N0} to {1}", value, status);
      }
   }
}
// The example displays the following output:
//       Converted -3 to Unknown
//       Converted -1 to Late
//       Converted 0 to OnTime
//       Converted 1 to Early
//       Converted 5 to Unknown
//       Converted 2,147,483,647 to Unknown

Obwohl die Enum Klasse bietet die explizite Implementierung von der IConvertible Schnittstelle für einen Enumerationswert in einen ganzzahligen Typ konvertiert, sollten Sie die Methoden verwenden die Convert Klasse, z. B. ToInt32, um diese Konvertierung auszuführen. Im folgende Beispiel wird veranschaulicht, wie Sie die GetUnderlyingType -Methode zusammen mit der Convert.ChangeType Methode, um einen Enumerationswert in seinen zugrunde liegenden Typ zu konvertieren. Beachten Sie, dass in diesem Beispiel wird den zugrunde liegende Typ der Enumeration zur Kompilierzeit bekannt ist nicht erforderlich ist.

ArrivalStatus status = ArrivalStatus.Early;
var number = Convert.ChangeType(status, Enum.GetUnderlyingType(typeof(ArrivalStatus)));
Console.WriteLine("Converted {0} to {1}", status, number);
// The example displays the following output:
//       Converted Early to 1

Die Parse und TryParse<TEnum> Methoden ermöglichen es Ihnen, die Darstellung eines Enumerationswerts in diesen Wert zu konvertieren. Darstellung der Zeichenfolge möglich den Namen oder den zugrunde liegenden Wert einer Enumerationskonstante. Beachten Sie, dass die Analysemethoden zeichenfolgendarstellungen Zahlen konvertiert werden, die nicht Mitglieder einer bestimmten Enumeration sind, wenn die Zeichenfolgen auf einen Wert von der zugrunde liegenden Enumerationstyp konvertiert werden können. Um dies zu verhindern, die IsDefined Methode kann aufgerufen werden, um sicherzustellen, dass das Ergebnis der Analysemethode ein gültiger Enumerationswert ist. Das Beispiel veranschaulicht diese Vorgehensweise und zeigt Sie Aufrufe zu den Parse(Type, String) und Enum.TryParse<TEnum>(String, TEnum) Methoden. Beachten Sie, dass die nicht generische Analysemethode ein Objekt zurückgibt, die Sie möglicherweise umgewandelt (in c#) oder konvertieren (in Visual Basic) in den entsprechenden Enumerationstyp.

string number = "-1";
string name = "Early";

try {
   ArrivalStatus status1 = (ArrivalStatus) Enum.Parse(typeof(ArrivalStatus), number);
   if (!(Enum.IsDefined(typeof(ArrivalStatus), status1)))
      status1 = ArrivalStatus.Unknown;
   Console.WriteLine("Converted '{0}' to {1}", number, status1);
}
catch (FormatException) {
   Console.WriteLine("Unable to convert '{0}' to an ArrivalStatus value.", 
                     number);
}   

ArrivalStatus status2;
if (Enum.TryParse<ArrivalStatus>(name, out status2)) {
   if (!(Enum.IsDefined(typeof(ArrivalStatus), status2)))
      status2 = ArrivalStatus.Unknown;
   Console.WriteLine("Converted '{0}' to {1}", name, status2);
}
else {
   Console.WriteLine("Unable to convert '{0}' to an ArrivalStatus value.", 
                     number);
}
// The example displays the following output:
//       Converted '-1' to Late
//       Converted 'Early' to Early

Sie können die Enumerationswerte in ihre Zeichenfolge konvertieren, durch Aufrufen der statischen Format -Methode als auch die Überladungen der Instanz ToString Methode. Eine Zeichenfolge können Sie um genau zu steuern, in dem ein Enumerationswert als Zeichenfolge dargestellt wird. Weitere Informationen finden Sie unter Enumerationsformatzeichenfolgen. Im folgenden Beispiel wird jede der unterstützten Enumerationsformatzeichenfolgen ("G" oder "g", "D" oder "d", "X" oder "X" und "F" oder "f"), konvertieren Sie ein Mitglied der ArrivalStatus -Enumeration, die als zeichenfolgendarstellungen.

string[] formats= { "G", "F", "D", "X"};
ArrivalStatus status = ArrivalStatus.Late;
foreach (var fmt in formats)
   Console.WriteLine(status.ToString(fmt));

// The example displays the following output:
//       Late
//       Late
//       -1
//       FFFFFFFF

Die Enum Typ implementiert nicht die IEnumerable oder IEnumerable<T> -Schnittstelle, die Sie mit Mitgliedern einer Sammlung durchlaufen kann eine foreach (in c#) oder For Each (in Visual Basic) erstellen. Allerdings können Sie Elemente in zwei verschiedene Arten aufzählen.

  • Rufen Sie die GetNames Methode, um ein Zeichenfolgenarray mit den Namen der Enumerationsmember abzurufen. Für jedes Element des Zeichenfolgenarrays können rufen Sie anschließend die Parse Methode, um die Zeichenfolge in den entsprechenden Enumerationswert zu konvertieren. Dieser Ansatz wird anhand des folgenden Beispiels veranschaulicht.

    string[] names = Enum.GetNames(typeof(ArrivalStatus));
    Console.WriteLine("Members of {0}:", typeof(ArrivalStatus).Name);
    Array.Sort(names);
    foreach (var name in names) {
       ArrivalStatus status = (ArrivalStatus) Enum.Parse(typeof(ArrivalStatus), name);
       Console.WriteLine("   {0} ({0:D})", status);
    }
    // The example displays the following output:
    //       Members of ArrivalStatus:
    //          Early (1)
    //          Late (-1)
    //          OnTime (0)
    //          Unknown (-3)      
    
  • Rufen Sie die GetValues Methode, um ein Array abzurufen, die zugrunde liegende enthält, Werte in der Enumeration. Für jedes Element des Arrays können rufen Sie anschließend die ToObject Methode, die ganze Zahl in den entsprechenden Enumerationswert zu konvertieren. Dieser Ansatz wird anhand des folgenden Beispiels veranschaulicht.

    var values = Enum.GetValues(typeof(ArrivalStatus));
    Console.WriteLine("Members of {0}:", typeof(ArrivalStatus).Name);
    foreach (var value in values) {
       ArrivalStatus status = (ArrivalStatus) Enum.ToObject(typeof(ArrivalStatus), value);
       Console.WriteLine("   {0} ({0:D})", status);
    }                                       
    // The example displays the following output:
    //       Members of ArrivalStatus:
    //          OnTime (0)
    //          Early (1)
    //          Unknown (-3)
    //          Late (-1)
    

Eine gemeinsame Verwendung einer Enumeration ist eine Gruppe von sich gegenseitig ausschließenden Werten dargestellt. Zum Beispiel eine ArrivalStatus Instanz kann, ist der Wert Early, OnTime, oder Late. Es ergibt keinen Sinn für den Wert einer ArrivalStatus -Instanz, die mehr als eine Enumerationskonstante zu reflektieren.

In anderen Fällen jedoch der Wert eines Enumerationsobjekts mehrere Enumerationsmember enthalten kann, und jedes Element ein Bitfeld im Enumerationswert darstellt. Die FlagsAttribute Attribut kann verwendet werden, um anzugeben, dass die Enumeration aus Bitfeldern besteht. Angenommen, eine Enumeration, die mit dem Namen Pets kann verwendet werden, um die Arten von Haustiere in einem Haushalt angeben. Sie können wie folgt definiert werden.

[Flags] public enum Pets { None=0, Dog=1, Cat=2, Bird=4, Rodent=8,
                           Reptile=16, Other=32 };

Die Pets -Enumeration kann dann verwendet werden, wie im folgenden Beispiel gezeigt.

Pets familyPets = Pets.Dog | Pets.Cat;
Console.WriteLine("Pets: {0:G} ({0:D})", familyPets);
// The example displays the following output:
//       Pets: Dog, Cat (3)      

Die folgenden bewährten Methoden sollte verwendet werden, wenn Sie ein bitweises definieren Enumeration und Anwenden der FlagsAttribute Attribut.

  • Verwenden der FlagsAttribute benutzerdefiniertes Attribut für eine Enumeration nur, wenn eine bitweise Operation (AND, OR, EXCLUSIVE OR) ausgeführt wird, die auf einem numerischen Wert.

  • Definieren Sie Enumerationskonstanten in Potenzen von zwei, d. h. 1, 2, 4, 8 und So weiter. Dies bedeutet, dass die einzelnen Flags in kombinierten Enumerationskonstanten nicht überschneiden.

  • Sollten Sie eine Enumerationskonstante für häufig verwendete Flag-Kombinationen zu erstellen. Beispielsweise ist eine Enumeration für-e/a-Dateivorgänge enthält, die die Enumerationskonstanten Read = 1 und Write = 2, sollten Sie die Enumerationskonstante erstellen ReadWrite = Read OR Write, kombiniert die Read und Write Flags. Darüber hinaus kann die bitweise OR-Operation zum Kombinieren des Flags ein erweitertes Konzept in einigen Fällen angesehen, die nicht für einfache Aufgaben erforderlich sein soll.

  • Seien Sie vorsichtig, wenn Sie eine negative Zahl als eine Flagenumerationskonstante definieren, da viele Flagpositionen auf 1 festgelegt werden, der Code dadurch verwirrend wird und Codierungsfehler fördern kann.

  • Eine bequeme Möglichkeit zum Überprüfen, ob ein Flag in einem numerischen Wert festgelegt ist, rufen Sie die Instanz ist HasFlag Methode, wie im folgenden Beispiel gezeigt.

    Pets familyPets = Pets.Dog | Pets.Cat;
    if (familyPets.HasFlag(Pets.Dog))
       Console.WriteLine("The family has a dog.");
    // The example displays the following output:
    //       The family has a dog.      
    

    Dies entspricht dem numerischen Wert und dem Flagenumerationskonstante, die alle in den numerischen Wert 0 (null), die nicht dem Flag entsprechen, eine bitweise AND-Operation ausführen und testen, ob das Ergebnis des Vorgangs die Enumerationskonstante Flag ist. Dies wird im folgenden Beispiel illustriert.

    Pets familyPets = Pets.Dog | Pets.Cat;
    if ((familyPets & Pets.Dog) == Pets.Dog)
       Console.WriteLine("The family has a dog.");
    // The example displays the following output:
    //       The family has a dog.      
    
  • Mit None wie der Namen des Flags Konstante aufgelistet, deren Wert 0 (null) ist. Sie können keine der None Enumerationskonstante in eine bitweise AND-Operation für ein Flag zu testen, da das Ergebnis immer 0 (null) ist. Allerdings können Sie eine logische ausführen nicht bitweisen Vergleich zwischen dem numerischen Wert und die None Enumerationskonstante zu bestimmen, ob in dem numerischen Wert Bits festgelegt sind. Dies wird im folgenden Beispiel illustriert.

    Pets familyPets = Pets.Dog | Pets.Cat;
    if (familyPets == Pets.None)
       Console.WriteLine("The family has no pets.");
    else
       Console.WriteLine("The family has pets.");   
    // The example displays the following output:
    //       The family has pets.      
    
  • Definieren Sie einen Enumerationswert ausschließlich, um den Zustand der Enumeration selbst zu spiegeln. Definieren Sie z. B. keine Enumerationskonstante, die lediglich das Ende der Enumeration kennzeichnet. Wenn Sie den letzten Wert der Enumeration bestimmen müssen, überprüfen Sie den Wert explizit. Darüber hinaus können Sie eine Überprüfung der Bereich für die ersten und letzten Enumerationskonstante ausführen, wenn alle Werte innerhalb des Bereichs gültig sind.

Im folgende Beispiel wird die Verwendung einer Enumeration zur Darstellung benannter Werte sowie einer weiteren Enumeration zur Darstellung benannter Bitfelder veranschaulicht.

using System;

public class EnumTest {
    enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
    enum BoilingPoints { Celsius = 100, Fahrenheit = 212 };
    [FlagsAttribute]
    enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

    public static void Main() {

        Type weekdays = typeof(Days);
        Type boiling = typeof(BoilingPoints);

        Console.WriteLine("The days of the week, and their corresponding values in the Days Enum are:");

        foreach ( string s in Enum.GetNames(weekdays) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( weekdays, Enum.Parse(weekdays, s), "d"));

        Console.WriteLine();
        Console.WriteLine("Enums can also be created which have values that represent some meaningful amount.");
        Console.WriteLine("The BoilingPoints Enum defines the following items, and corresponding values:");

        foreach ( string s in Enum.GetNames(boiling) )
            Console.WriteLine( "{0,-11}= {1}", s, Enum.Format(boiling, Enum.Parse(boiling, s), "d"));

        Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;
        Console.WriteLine();
        Console.WriteLine("myColors holds a combination of colors. Namely: {0}", myColors);
    }
}

Universal Windows Platform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portable Class Library
Unterstützt in: portable .NET platforms
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Dieser Typ ist threadsicher.

Zurück zum Anfang
Anzeigen:
© 2016 Microsoft