2011-07-06 12 views
9

Mamy enum z członków posiadających wartości losowych, powiedzmyNie można pobrać członków wyliczenia w kolejności, w jakiej zostały zdefiniowane!

enum MyEnum 
{ 
    enumMember1 = 100, 
    enumMember2 = 10, 
    enumMember3 = 50 
} 

Nie mogliśmy iterację członków enum w kolejności, w jakiej zostały zdefiniowane! Enum.GetValues i Enum.GetNames zarówno wewnętrznie sortować członków i daje wynik!

iteracji tablicy zwróconej przez Enum.GetNames lub Enum.GetValues ​​i robi .ToString() na każdym z elementów tablicy daje nam

enumMember2, enumMember3, enumMember100. 

właśnie zastanawiałem się, czy istnieje jakakolwiek z podejściem skrzynki dostać członkowie enum w kolejności, w jakiej zostali stworzeni? Czy wyszukiwanie, nie dostałem dużo informacji! Dzięki!

P.S. Nie chciałbym tego robić poprzez niestandardowy atrybut! I podczas pisania tego, miałem wątpliwość, czy IL dla enum zostanie wygenerowany po posortowaniu członków Enum, sprawdzeniu go ryt daleko!

Odpowiedz

10

Można użyć refleksji:

var values = typeof(MyEnum).GetFields(BindingFlags.Public | BindingFlags.Static) 
       .Select (x => Enum.Parse(typeof(MyEnum), x.Name)); 
+1

Tak, droga odbicie działa! Życzyć sobie, aby Enum.GetNames zachował kolejność, w której deklarowano enum! Dzięki! – ioWint

+1

http://stackoverflow.com/questions/8067493/if-getfields-doesnt-guarantee-order-how-does-layoutkind-sequential-work Odsyłam do tego łącza, ponieważ GetFields (..) nie zawsze może powrócić prawidłowa kolejność. post ma inne rozwiązanie – Mike

+0

Uwagi do metody "Enum.GetNames' [http://msdn.microsoft.com/en-us/library/system.enum.getnames.aspx]: Elementy tablicy wartości zwracanych są sortowane według binarne wartości wyliczonych stałych (to znaczy, ich niepodpisana wielkość) –

Powiązane problemy