Невозможно получить члены перечисления в порядке их определения! - PullRequest
9 голосов
/ 06 июля 2011

У нас есть перечисление с членами, имеющими случайные значения, скажем,

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

Мы не можем перебрать элементы перечисления в порядке, в котором они были определены!Enum.GetValues и Enum.GetNames оба внутренне сортируют элементы и дают результат!

, повторяя массив, возвращенный Enum.GetNames или Enum.GetValues, и делая .ToString() для каждого из элементов массива, мы получаем

enumMember2, enumMember3, enumMember100. 

Было просто интересно, есть ли какой-нибудь нестандартный подход для получения членов enum в порядке их создания?Сделал поиск, не получил много информации!Спасибо!

PS Я бы не хотел делать это через пользовательский атрибут!И во время его составления у меня возникли сомнения, генерируется ли IL для enum после сортировки членов Enum, когда я собираюсь проверить его!

1 Ответ

10 голосов
/ 07 июля 2011

Вы можете использовать отражение:

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