2010-09-28 21 views
61

Mam wyliczenie, które chciałbym wyświetlić wszystkie możliwe wartości. Czy istnieje sposób na uzyskanie tablicy lub listy wszystkich możliwych wartości wyliczenia zamiast ręcznego tworzenia takiej listy? na przykład Jeśli mam ENUM:Jak uzyskać tablicę wszystkich wartości wyliczeniowych w języku C#?

public enum Enumnum { TypeA, TypeB, TypeC, TypeD } 

jak będę mógł się dostać List<Enumnum> że zawiera { TypeA, TypeB, TypeC, TypeD }?

+4

możliwy duplikat [zamień wyliczenie na listę w C#] (http://stackoverflow.com/questions/1167361/convert-enum-to-list-in-c) –

Odpowiedz

116

ten dostaje zwykły tablicę wartości enum przy użyciu Enum.GetValues:

var valuesAsArray = Enum.GetValues(typeof(Enumnum)); 

I to dostaje listę Generic:

var valuesAsList = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList(); 
+0

Dzięki, dokładnie to, czego szukałem! –

+5

To mnie zawsze zastanawia, dlaczego 'Enumnum.GetValues ​​()' i 'Enumnum.GetNames()' nie istnieje. – dalle

+4

Dla zmiennej tablicowej, w której typ elementu jest znany podczas kompilacji, użyj 'var valuesAsArray = (Enumnum []) Enum.GetValues ​​(typeof (Enumnum));'. –

1

Można użyć

Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().ToArray(); 

ta zwraca tablicę!

6
Enum.GetValues(typeof(Enumnum)); 

zwraca tablicę wartości w Enum.

12

Spróbuj kod:

Enum.GetNames(typeof(Enumnum)); 

Ten powrót do string[] ze wszystkimi nazwiskami enum wybranego wyliczenia.

+1

Zwraca * nazwy * wartości wyliczonych; OP wydaje się być po samych wartościach *. –

1

z tym:

string[] myArray = Enum.GetNames(typeof(Enumnum));

i można uzyskać dostęp wartości tablicy tak:

Array myArray = Enum.GetValues(typeof(Enumnum));
+1

Enum.GetValues ​​nie zwraca ciągu [] – messenger

0

Również można użyć

var enumAsJson=typeof(SomeEnum).Name + ":[" + string.Join(",", Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().Select(e => e.ToString())) + "]"; 

dla uzyskać wszystkie elementy w enum jak formacie JSON .

2

Coś trochę inaczej:

typeof(SomeEnum).GetEnumValues(); 
1

Możesz zrobić tak:

public enum Enumnum { 
      TypeA = 11, 
      TypeB = 22, 
      TypeC = 33, 
      TypeD = 44 
     } 

Wszystko int wartości tego enum jest 11,22,33,44.

można uzyskać te wartości, to:

var enumsValues = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList().Select(e => (int)e); 

string.Join(",", enumsValues) jest 11,22,33,44.

0

Jeśli wolisz bardziej ogólny sposób, oto jest. Możesz dodać więcej konwerterów zgodnie ze swoimi potrzebami.

public static class EnumConverter 
    { 

     public static string[] ToNameArray<T>() 
     { 
      return Enum.GetNames(typeof(T)).ToArray(); 
     } 

     public static Array ToValueArray<T>() 
     { 
      return Enum.GetValues(typeof(T)); 
     } 

     public static List<T> ToListOfValues<T>() 
     { 
      return Enum.GetValues(typeof(T)).Cast<T>().ToList(); 
     } 


     public static IEnumerable<T> ToEnumerable<T>() 
     { 
      return (T[])Enum.GetValues(typeof(T)); 
     } 

    } 

Przykładowe implementacje:

string[] roles = EnumConverter.ToStringArray<ePermittedRoles>(); 
    List<ePermittedRoles> roles2 = EnumConverter.ToListOfValues<ePermittedRoles>(); 
    Array data = EnumConverter.ToValueArray<ePermittedRoles>(); 
0

PO poprosił Jak zdobyć tablicę wszystkich wartości w C# enum?

Co jeśli chcesz uzyskać tablicę wybranych wartości enum w języku C#?

Twój Enum

enum WeekDays 
    { 
     Sunday, 
     Monday, 
     Tuesday 
    } 

Jeśli chcesz po prostu wybrać Sunday z Enum.

WeekDays[] weekDaysArray1 = new WeekDays[] { WeekDays.Sunday }; 

    WeekDays[] weekDaysArray2 = Enum.GetValues(typeof(WeekDays)).Cast<WeekDays>().Where 
    (x => x == WeekDays.Sunday).ToArray(); 

Kredyty trafiają do kompetentnej osoby.

Referencje:

1.

2.

Nadzieja pomaga kogoś.

Powiązane problemy