Перечисления. Метод GetValue в цикле.
От: BadCats  
Дата: 05.04.16 11:25
Оценка:
всем привет, имеется следующий пример:

class Program
    {
        static void Main()
        {
            // Enum.GetValues() - возвращает экземпляр System.Array, при этом каждому элементу массива 
            // будет соответствовать член указанного перечисления.

            // Помещаем в массив элементы перечисления.
            Array array = Enum.GetValues(typeof(EnumType));

            // Получаем информацию о количестве элементов в массиве.
            Console.WriteLine("Это перечисление содержит {0} членов \n", array.Length);

            // Вывод на экран всех элементов перечисления
            for (int i = 0; i < array.Length; i++)
            {
                Console.WriteLine("Имя константы: {0}, значение {0:D}", array.GetValue(i));
            }

            // Delay.
            Console.ReadKey();
        }
    }

вот само перечисление:

 enum EnumType
    {
        Zero,  // = 0 
        One = 1,
        one = One,
        Two = 2,
        Three, // = 3
        Four,  // = 4
        Five = 5,
        //Six,
        Seven,
        Eight = 8,
        Nine,
        Ten = 10,
        Infinite = 255
    }

у меня вопрос по поводу цикла


 // Вывод на экран всех элементов перечисления
            for (int i = 0; i < array.Length; i++)
            {
                Console.WriteLine("Имя константы: {0}, значение {0:D}", array.GetValue(i));
            }


В переменной arrray типа Array содержится все элементы перечисления EnumType, которые представленны в виде таблицы как и любой другой массив, а метод GetValue по i-му номеру вытягивает данные о элементе массива констант записанного в переменную array.

Так вот, этот массив создается как одномерный или как двумерный — т.к константа перечисления состоит из имени и значения?
c# циклы
Re: Перечисления. Метод GetValue в цикле.
От: Sinix  
Дата: 05.04.16 11:32
Оценка:
Здравствуйте, BadCats, Вы писали:

BC>Так вот, этот массив создается как одномерный или как двумерный — т.к константа перечисления состоит из имени и значения?

Одномерный, элементы массива — сами значения enum. Легко проверить под отладчиком.

Также см http://stackoverflow.com/a/1398668/318263

UPD.
Это в какой книжке такой забавный пример предлагают? Особенно с Seven и с one некрасиво вышло. Хотя Infinite тож ничего.
Отредактировано 05.04.2016 11:35 Sinix . Предыдущая версия .
Re[2]: Перечисления. Метод GetValue в цикле.
От: BadCats  
Дата: 05.04.16 11:47
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, BadCats, Вы писали:


BC>>Так вот, этот массив создается как одномерный или как двумерный — т.к константа перечисления состоит из имени и значения?

S>Одномерный, элементы массива — сами значения enum. Легко проверить под отладчиком.

S>Также см http://stackoverflow.com/a/1398668/318263

S>
S>UPD.
Это в какой книжке такой забавный пример предлагают? Особенно с Seven и с one некрасиво вышло. Хотя Infinite тож ничего.
это не книжка, это курс с сайта itvdn.com — курс c# Essebtial , урок № 8
Re[3]: Перечисления. Метод GetValue в цикле.
От: Sinix  
Дата: 05.04.16 11:55
Оценка: +2
Здравствуйте, BadCats, Вы писали:


BC>это не книжка, это курс с сайта itvdn.com — курс c# Essebtial , урок № 8


Вы повнимательней с этим курсом тогда. Так, как оно расписано в примере, не делает никто и никогда. Именно по этой причине: очень легко накосячить и не заметить

Или прописываем значения для всех элементов у enum, или ни у одного.
* исключения — всякие Default = OtherValue, но они всегда в конце записываются.
Re[4]: Перечисления. Метод GetValue в цикле.
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.04.16 23:38
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Вы повнимательней с этим курсом тогда. Так, как оно расписано в примере, не делает никто и никогда. Именно по этой причине: очень легко накосячить и не заметить


Думаю они там демонстрируют логику задания значений элементам энума.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.