Ten artykuł został przetłumaczony przez maszynę. Aby wyświetlić jego treść w języku angielskim, zaznacz pole wyboru Angielski. Możesz też wyświetlić angielski tekst w okienku wyskakującym, przesuwając wskaźnik myszy nad konkretny tekst”.
Tłumaczenie
Angielski

Klasa Enum

.NET Framework (current version)
 

Data opublikowania: październik 2016

Udostępnia klasę podstawową dla wyliczenia.

Przestrzeń nazw:   System
Zestaw:  mscorlib (w mscorlib.dll)


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

NazwaOpis
System_CAPS_protmethodEnum()

Inicjuje nowe wystąpienie Enum klasy.

NazwaOpis
System_CAPS_pubmethodCompareTo(Object)

Porównuje to wystąpienie określonego obiektu i zwraca wskazanie ich względnych wartości.

System_CAPS_pubmethodEquals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.(Przesłania ValueType.Equals(Object)).

System_CAPS_protmethodFinalize()

Umożliwia spróbuj zwolnić zasoby i wykonywać inne operacje czyszczenia, zanim zostanie odzyskane przez wyrzucanie elementów bezużytecznych.(Dziedziczone z Object).

System_CAPS_pubmethodSystem_CAPS_staticFormat(Type, Object, String)

Określona wartość określonego typu wyliczeniowego konwertuje na jego reprezentację ciągu równoważnego zgodnie z określonym formacie.

System_CAPS_pubmethodGetHashCode()

Zwraca kod skrótu dla wartości tego wystąpienia.(Przesłania ValueType.GetHashCode()).

System_CAPS_pubmethodSystem_CAPS_staticGetName(Type, Object)

Pobiera nazwę stała w wyliczeniu określonej określonej wartości.

System_CAPS_pubmethodSystem_CAPS_staticGetNames(Type)

Pobiera tablicę nazw stałych w określonym wyliczenia.

System_CAPS_pubmethodGetType()

Pobiera Type bieżącego wystąpienia.(Dziedziczone z Object).

System_CAPS_pubmethodGetTypeCode()

Zwraca kod typ podstawowy typ ten element członkowski wyliczenia.

System_CAPS_pubmethodSystem_CAPS_staticGetUnderlyingType(Type)

Zwraca typ podstawowy określony wyliczenia.

System_CAPS_pubmethodSystem_CAPS_staticGetValues(Type)

Pobiera tablicę wartości stałych w określonym wyliczenia.

System_CAPS_pubmethodHasFlag(Enum)

Określa, czy co najmniej jednego pola bitowe są ustawione w bieżącym wystąpieniu.

System_CAPS_pubmethodSystem_CAPS_staticIsDefined(Type, Object)

Zwraca wskazuje, czy stała określoną wartość istnieje w wyliczeniu określony.

System_CAPS_protmethodMemberwiseClone()

Tworzy płytką kopię bieżącego Object.(Dziedziczone z Object).

System_CAPS_pubmethodSystem_CAPS_staticParse(Type, String)

Konwertuje ciąg reprezentujący nazwę lub wartość liczbową jednej lub więcej stałych wyliczeniowych równoważnego obiektu wyliczanego.

System_CAPS_pubmethodSystem_CAPS_staticParse(Type, String, Boolean)

Konwertuje ciąg reprezentujący nazwę lub wartość liczbową jednej lub więcej stałych wyliczeniowych równoważnego obiektu wyliczanego. Parametr określa, czy operacja jest rozróżniana wielkość liter.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Byte)

Konwertuje określony 8-bitowa liczba całkowita bez znaku do elementu członkowskiego wyliczenia.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Int16)

Konwertuje określony 16-bitową liczbę całkowitą ze znakiem do elementu członkowskiego wyliczenia.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Int32)

Konwertuje określony 32-bitowej liczby całkowitej ze znakiem do elementu członkowskiego wyliczenia.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Int64)

Konwertuje określony 64-bitowej liczby całkowitej ze znakiem do elementu członkowskiego wyliczenia.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, Object)

Konwertuje określony obiekt z wartością całkowitą do elementu członkowskiego wyliczenia.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, SByte)

Konwertuje wartość określonej 8-bitową liczbę całkowitą ze znakiem do elementu członkowskiego wyliczenia.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, UInt16)

Konwertuje wartość określona liczba całkowita bez znaku 16-bitową do elementu członkowskiego wyliczenia.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, UInt32)

Konwertuje wartość określona liczba całkowita bez znaku 32-bitowego do elementu członkowskiego wyliczenia.

System_CAPS_pubmethodSystem_CAPS_staticToObject(Type, UInt64)

Konwertuje wartość określona liczba całkowita bez znaku 64-bitowych do elementu członkowskiego wyliczenia.

System_CAPS_pubmethodToString()

Konwertuje wartość tego wystąpienia na jego reprezentację ciągu równoważnego.(Przesłania ValueType.ToString()).

System_CAPS_pubmethodToString(IFormatProvider)

Nieaktualne. Ta metoda przeciążenia jest przestarzała; Użyj Enum.ToString().

System_CAPS_pubmethodToString(String)

Konwertuje wartość tego wystąpienia na jego reprezentację ciągu równoważnego w określonym formacie.

System_CAPS_pubmethodToString(String, IFormatProvider)

Nieaktualne. Ta metoda przeciążenia jest przestarzała; Użyj Enum.ToString(String).

System_CAPS_pubmethodSystem_CAPS_staticTryParse<TEnum>(String, TEnum)

Konwertuje ciąg reprezentujący nazwę lub wartość liczbową jednej lub więcej stałych wyliczeniowych równoważnego obiektu wyliczanego. Zwracana wartość wskazuje, czy konwersja powiodła się.

System_CAPS_pubmethodSystem_CAPS_staticTryParse<TEnum>(String, Boolean, TEnum)

Konwertuje ciąg reprezentujący nazwę lub wartość liczbową jednej lub więcej stałych wyliczeniowych równoważnego obiektu wyliczanego. Parametr określa, czy operacja jest rozróżniana wielkość liter. Zwracana wartość wskazuje, czy konwersja powiodła się.

NazwaOpis
System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToBoolean(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje wartość bieżącą wartość logiczną na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToByte(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje wartość bieżącą 8-bitowa liczba całkowita bez znaku na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToChar(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje wartość bieżącą znak Unicode na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDateTime(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje wartość bieżącego DateTime na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDecimal(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje wartość bieżącego Decimal na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToDouble(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje wartość bieżącą na liczby zmiennoprzecinkowe podwójnej precyzji punktu numer na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt16(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje bieżącą wartość 16-bitową liczbę całkowitą ze znakiem zależy od typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt32(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje bieżącą wartość całkowita 32-bitowy oparty na typie podstawowym.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToInt64(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje bieżącą wartość całkowita 64-bitowy oparty na typie podstawowym.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSByte(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje bieżącą wartość całkowitą podpisanego 8-bitową na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToSingle(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje wartość bieżącą liczba zmiennoprzecinkowa pojedynczej precyzji, na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToType(Type, IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje bieżącą wartość określonego typu na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt16(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje bieżącą wartość 16-bitowa liczba całkowita bez znaku na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt32(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje wartość bieżącą 32-bitowa liczba całkowita bez znaku na podstawie typu podstawowego.

System_CAPS_pubinterfaceSystem_CAPS_privmethodIConvertible.ToUInt64(IFormatProvider)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Konwertuje bieżącą wartość 64-bitowa liczba całkowita bez znaku na podstawie typu podstawowego.

Wyliczenie to zbiór stałe nazwane, którego typ podstawowy jest dowolnego typu całkowitego. Jeśli żaden typ podstawowy jest jawnie zadeklarowana, Int32 jest używany. Enumjest klasą bazową dla wszystkich wyliczenia w programie .NET Framework. Typy wyliczeniowe są definiowane przez enum — słowo kluczowe języka C# i Enum... End Enum utworzyć w języku Visual Basic.

Enumudostępnia metody porównanie wystąpienia tej klasy, konwertowania wartości wystąpienia na jej reprezentację konwertowanie reprezentację liczby na wystąpienie tej klasy i tworzenia wystąpienia określonego wyliczenie i wartości.

Wyliczenie można również traktować jako pole bitowe. Aby uzyskać więcej informacji, zobacz Non-wyłącznie elementy członkowskie i atrybut Flags sekcji i FlagsAttribute tematu.

W tym temacie:

Tworzenie typu wyliczenia
Utworzenie wystąpienia typu wyliczenia
Najlepsze rozwiązania w zakresie — wyliczenie
Wykonywanie operacji z wyliczenia
      Wykonywania konwersji
      Podczas analizowania wartości wyliczenia
      Formatowanie wartości wyliczenia
Iteracja elementy członkowskie wyliczenia
Elementy Członkowskie inne niż na wyłączność i atrybut Flags
Dodawanie metod — wyliczenie

Języki programowania zwykle zawierają składni, aby zadeklarować wyliczenie zawiera zestaw stałe nazwane i ich wartości. Poniższy przykład przedstawia składnię wykorzystywaną przez C# i Visual Basic zdefiniowanie wyliczenia. Tworzy wyliczenie o nazwie ArrivalStatus mający trzech elementów członkowskich: ArrivalStatus.Early, ArrivalStatus.OnTime, i ArrivalStatus.Late. Należy pamiętać, że w obu przypadkach wyliczenia nie jawnie dziedziczy Enum; relacji dziedziczenia jest niejawnie obsługiwane przez kompilator.

public enum ArrivalStatus { Late=-1, OnTime=0, Early=1 };
System_CAPS_warningOstrzeżenie

Nigdy nie należy utworzyć których typ podstawowy jest niecałkowity typ wyliczeniowy lub Char. Chociaż typem wyliczenia można tworzyć przy użyciu odbicia, wywołania metody, które używają wynikowy typ są zawodne i może także zgłaszać dodatkowe wyjątki.

Można utworzyć wystąpienie typu wyliczenia tak samo, jak wystąpienia dowolnego typu wartości: deklarowanie zmiennej i przypisując jedną z wyliczenia do niego. Poniższy przykład tworzy ArrivalStatus o wartości 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)

Można również utworzyć wystąpienie wartością wyliczenia w następujący sposób:

  • Za pomocą funkcji określonym programowania w języku rzutowania (jak C#) lub przekonwertować (tak jak w języku Visual Basic) wartość całkowitą wartością wyliczenia. Poniższy przykład tworzy ArrivalStatus obiektu, którego wartość jest ArrivalStatus.Early w ten sposób.

    ArrivalStatus status2 = (ArrivalStatus) 1;
    Console.WriteLine("Arrival Status: {0} ({0:D})", status2);
    // The example displays the following output:
    //       Arrival Status: Early (1)
    
  • Przez wywołanie jego niejawne domyślnego konstruktora. Jak w poniższym przykładzie pokazano, w tym przypadku odpowiednia wartość wyliczenia wystąpienia jest 0. Jednak to nie jest zawsze wartość prawidłowej stałej w wyliczeniu.

    ArrivalStatus status1 = new ArrivalStatus();
    Console.WriteLine("Arrival Status: {0} ({0:D})", status1);
    // The example displays the following output:
    //       Arrival Status: OnTime (0)
    
  • Wywołując Parse lub TryParse<TEnum> metodę, aby przeanalizować ciągu zawierającego nazwę stała w wyliczeniu. Aby uzyskać więcej informacji, zobacz podczas analizowania wartości wyliczenia sekcji.

  • Wywołując ToObject do przekonwertowania na typ wyliczeniowy wartością całkowitą. Aby uzyskać więcej informacji, zobacz wykonywania konwersji sekcji.

Zaleca się stosować następujące najlepsze rozwiązania, podczas definiowania Typy wyliczeniowe:

  • Jeśli nie zdefiniowano elementu członkowskiego wyliczenia, którego wartość wynosi 0, należy rozważyć utworzenie None stała wyliczenia. Domyślnie pamięć używana na potrzeby wyliczenia jest ustawiana na wartość zero przez środowisko uruchomieniowe języka wspólnego. W związku z tym jeśli nie zostanie zdefiniowana stałą, którego wartość wynosi zero, wyliczenia będzie zawierać niedozwoloną wartość, po jego utworzeniu.

  • W przypadku oczywiste domyślne działanie case, aby reprezentować, rozważ użycie wyliczany aplikacji stałej którego wartość wynosi zero do reprezentowania go. Jeśli nie ma żadnych przypadek domyślny, rozważ użycie stała wyliczeniowego którego wartość wynosi zero, aby określić przypadek, który nie jest reprezentowany przez żaden z innych stałych wyliczeniowych.

  • Nie określaj wyliczone stałe, które są zarezerwowane do użytku w przyszłości.

  • Podczas definiowania metody lub właściwości, która ma stałą wyliczone jako wartość, należy wziąć pod uwagę sprawdzania poprawności wartości. Dzieje się tak można rzutować wartość liczbową na typ wyliczeniowy nawet, jeśli nie zdefiniowano wartości numerycznych w wyliczeniu.

Dodatkowe wskazówki na typy wyliczeniowe pola bitowe są stałe, których są wyświetlane w Non-wyłącznie elementy członkowskie i atrybut Flags sekcji.

Nie można definiować nowych metod tworzenia wyliczenia. Jednak typem wyliczenia dziedziczy kompletny zestaw statyczne i metody wystąpienia z Enum klasy. Poniższe sekcje przeglądu większość tych metod, oprócz kilka metod, które są często używane podczas pracy z wartości wyliczenia.

Można konwertować między wyliczeniowego, a jego typem podstawowym za pomocą rzutowanie (w języku C#) lub operatora konwersji (w języku Visual Basic). W poniższym przykładzie użyto operatory rzutowania lub konwersji do wykonywania konwersji zarówno z liczby całkowitej w celu wartością wyliczenia i z wartością wyliczenia na liczbę całkowitą.

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

int value4 = (int) status3;

Enum Zawiera również klasy ToObject metodę, która konwertuje wartość typu całkowitego na wartość wyliczenia. W poniższym przykładzie użyto ToObject(Type, Int32) metodę, aby przekonwertować Int32 do ArrivalStatus wartości. Należy zauważyć, że ponieważ ToObject zwraca wartość typu Object, użyj operatora rzutowania lub konwersji nadal może być konieczne można rzutować obiektu na typ wyliczeniowy.

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

Podczas konwersji całkowitą wartością wyliczenia, jest można przypisać wartość, która nie jest rzeczywiście członkiem wyliczenia. Aby tego uniknąć, można przekazać liczba całkowita IsDefined metoda przed przeprowadzeniem konwersji. W poniższym przykładzie użyto tej metody, aby określić, czy elementy w tablicy wartości będące liczbami całkowitymi można przekonwertować na ArrivalStatus wartości.

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

Mimo że Enum klasa zawiera jawne implementacje interfejsu z IConvertible interfejs dla konwersji z wartości wyliczenia na typ całkowity, należy użyć metody Convert klas, takich jak ToInt32, do wykonywania tych konwersji. Poniższy przykład przedstawia, jak używasz GetUnderlyingType metody wraz z programem Convert.ChangeType metodę, aby przekonwertować wartość wyliczenia na jego typ podstawowy. Należy pamiętać, że w tym przykładzie nie wymaga z typem podstawowym typu wyliczania znane w czasie kompilacji.

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

Parse i TryParse<TEnum> metody umożliwiają konwertowanie reprezentacja ciągu wartości wyliczenia z tą wartością. Reprezentacja ciągu może być nazwa lub odpowiednia wartość stałej wyliczenia. Należy zwrócić uwagę, metody analizy pomyślnie przekonwertuje reprezentacje ciąg liczb, które nie są członkami określonej wyliczenia, jeśli ciągi można konwertować na wartość typ podstawowy wyliczenia. Aby temu zapobiec, IsDefined można wywołać metody w celu zapewnienia wartość wyliczenia nieprawidłowy wynik metody analizy. W przykładzie pokazano tego podejścia i przedstawiono oba wywołania Parse(Type, String) i Enum.TryParse<TEnum>(String, TEnum) metody. Należy pamiętać, że nieogólną metodę analizowania zwraca obiekt, który może być konieczne rzutowanie (C#) lub przekonwertować (w języku Visual Basic) na typ wyliczeniowy odpowiednie.

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

Można przekonwertować wartości wyliczenia ich oświadczenia ciąg przez wywołanie metody statycznych Format metody, a także przeciążenia wystąpienia ToString metody. Ciąg formatu służy do kontrolowania sposobu dokładne, w którym wartość wyliczenia jest reprezentowany jako ciąg. Aby uzyskać więcej informacji, zobacz Wyliczanie ciągów formatujących. W poniższym przykładzie użyto każdej z obsługiwanych wyliczanie ciągów formatujących ("G" lub "g", "D" lub "d", "X" lub "x" i "F" lub "f") można przekonwertować członkiem ArrivalStatus wyliczeniu, aby jej reprezentacji ciągu.

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

Enum Typ nie implementuje IEnumerable lub IEnumerable<T> interfejsu, które umożliwią przejść elementów członkowskich kolekcji za pomocą foreach (w języku C#) lub For Each (w języku Visual Basic) utworzyć. Jednak można wyliczyć elementów członkowskich na dwa sposoby.

  • Możesz wywołać GetNames metoda pobierania tablica ciągów zawierająca nazwy elementy członkowskie wyliczenia. Następnie dla każdego elementu w tablicy ciągów, należy wywołać Parse metodę, aby przekonwertować ciągu na wartość wyliczenia równoważne. To podejście pokazano w poniższym przykładzie.

    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)      
    
  • Możesz wywołać GetValues metoda pobierania tablicę zawierającą podstawową wartości w wyliczeniu. Następnie dla każdego elementu tablicy, należy wywołać ToObject metodę, aby przekonwertować na wartość wyliczenia równoważne do liczby całkowitej. To podejście pokazano w poniższym przykładzie.

    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)
    

Jeden zazwyczaj wyliczenie jest używane do reprezentowania zestaw wartości wykluczają się wzajemnie. Na przykład ArrivalStatus wystąpienie może mieć wartość Early, OnTime, lub Late. Nie ma sensu dla wartości ArrivalStatus wystąpienia, aby odzwierciedlić więcej niż jeden stała wyliczenia.

W innych przypadkach należy jednak wartość obiektu wyliczenia może zawierać wiele elementy członkowskie wyliczenia i każdy element członkowski reprezentuje pole bitowe wartości wyliczenia. FlagsAttribute Atrybut może służyć do wskazują, że wyliczenia składa się z bitowego pól. Na przykład wyliczeń o nazwie Pets może używać do określenia rodzaje zwierząt domowych w gospodarstwo domowe. Mogą być zdefiniowane w następujący sposób.

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

Pets Wyliczenia mogą być następnie używane jak pokazano w poniższym przykładzie.

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

Następujące najlepsze rozwiązania stosuje się podczas definiowania bitowej wyliczenie i stosowanie FlagsAttribute atrybutu.

  • Użyj FlagsAttribute atrybutu niestandardowego wyliczania tylko wtedy, gdy operacja bitowa (AND, OR wyłączne lub) ma zostać wykonane na wartość liczbową.

  • Zdefiniuj wyliczenie stałe w potęgami liczby dwa, oznacza to, 1, 2, 4, 8 i tak dalej. Oznacza to, że indywidualne flagi w stałych Scalonej wyliczenia nie mogą się pokrywać.

  • Należy rozważyć utworzenie wyliczany stała dla często używanych flagi kombinacji. Na przykład, jeśli masz wyliczenie używane dla operacji We/Wy pliku zawierającego stałych wyliczeniowych Read = 1 i Write = 2, należy rozważyć utworzenie Stała wyliczeniowa ReadWrite = Read OR Write, który łączy Read i Write flagi. Ponadto używane do łączenia flagi operacji lub może zostać uznane za zaawansowane koncepcji w pewnych okolicznościach, które nie powinny być wymagane dla prostych zadań.

  • Należy zachować ostrożność, jeśli zdefiniować liczbą ujemną jako stała wyliczenia flag, ponieważ wielu pozycji flagi może być ustawiony na 1, co może zwiększyć mylące kodu i zachęca błędy kodowania.

  • Jest wygodny sposób, aby sprawdzić, czy ustawiono flagę w wartość liczbową wywołać wystąpienie HasFlag metody, jak pokazano w poniższym przykładzie.

    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.      
    

    Odpowiada to wykonywanie operacji i między wartość liczbową i stała wyliczenia flagi, ustawiająca wszystkie bity w wartość liczbową na zero, które nie odpowiadają flagę i następnie sprawdzenie, czy wynik tej operacji jest równa stała wyliczenia flagi. Jest to zilustrowane w poniższym przykładzie.

    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.      
    
  • Użyj None jako nazwa flagi wyliczyć stała, którego wartość wynosi zero. Nie można użyć None stała wyliczenia w operacji i do testowania dla flagi, ponieważ wynik to zawsze zero. Jednak można wykonać logiczne, nie bitowe, porównania wartości liczbowych i None stała wyliczany można określić, czy wszystkie bity w wartość liczbową zostały ustawione. Jest to zilustrowane w poniższym przykładzie.

    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.      
    
  • Definiuje wartości wyliczenia wyłącznie w celu utworzenia duplikatów stan wyliczenia sam. Na przykład nie definiują wyliczany stałą, której jedynie oznacza koniec wyliczenia. Jeśli trzeba określić ostatniej wartości wyliczenia, sprawdź jawnie dla tej wartości. Ponadto można wykonać sprawdzania zakresu stała wyliczenia imię i nazwisko, jeśli wszystkie wartości w zakresie są prawidłowe.

Ponieważ Typy wyliczeniowe są zdefiniowane przez struktury języka, takich jak enum (C#) i Enum (Visual Basic), nie można definiować niestandardowe metody dla typu wyliczenia innych niż te dziedziczone z metody Enum klasy. Jednak można użyć metody rozszerzenia Dodawanie funkcji do typu konkretnego wyliczenia.

W poniższym przykładzie Grades wyliczenie reprezentuje klas możliwych list, które student może pojawić się w klasie. Metody rozszerzenia o nazwie Passing jest dodawany do Grades wpisz, aby każde wystąpienie tego typu teraz "wie" czy reprezentuje klasy przekazywanie, czy nie. Extensions Klasa zawiera także statyczne zmiennej odczytu i zapisu, która definiuje klasy minimalna przekazywanie. Wartość zwracana Passing — metoda rozszerzenia odzwierciedla bieżącą wartość tej zmiennej.

using System;

// Define an enumeration to represent student grades.
public enum Grades { F = 0, D = 1, C = 2, B = 3, A = 4 };

// Define an extension method for the Grades enumeration.
public static class Extensions
{        
  public static Grades minPassing = Grades.D;

  public static bool Passing(this Grades grade)
  {
      return grade >= minPassing;
  }
}

class Example
{       
  static void Main()
  {
      Grades g1 = Grades.D;
      Grades g2 = Grades.F;
      Console.WriteLine("{0} {1} a passing grade.", g1, g1.Passing() ? "is" : "is not");
      Console.WriteLine("{0} {1} a passing grade.", g2, g2.Passing() ? "is" : "is not");

      Extensions.minPassing = Grades.C;
      Console.WriteLine("\nRaising the bar!\n");
      Console.WriteLine("{0} {1} a passing grade.", g1, g1.Passing() ? "is" : "is not");
      Console.WriteLine("{0} {1} a passing grade.", g2, g2.Passing() ? "is" : "is not");
  }
}
// The exmaple displays the following output:
//       D is a passing grade.
//       F is not a passing grade.
//       
//       Raising the bar!
//       
//       D is not a passing grade.
//       F is not a passing grade.

W poniższym przykładzie pokazano, do reprezentowania nazwanych wartości i innym wyliczenie do reprezentowania pola bitowe o nazwie przy użyciu wyliczania.

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);
    }
}

Platforma uniwersalna systemu Windows
Dostępne od 8
.NET Framework
Dostępne od 1.1
Biblioteka klas przenośnych
Obsługiwane w: przenośne platformy .NET
Silverlight
Dostępne od 2.0
Windows Phone Silverlight
Dostępne od 7.0
Windows Phone
Dostępne od 8.1

Ten typ jest bezpieczny wątkowo.

Powrót do początku
Pokaż: