четверг, 14 апреля 2016 г.

FORMATIVE: Обобщённые методы и перечисления C#

Вопрос студента сегодня пришёлся очень ко двору и в тему семинара (обобщения). Разбирались не долго, но мне вперёд наука: обращать внимание на дьявола в деталях.

У студента в курсовой работе 20 перечислений (Enum). Ему очень хотелось получать целочисленное значение, связанное с константой перечисления. Казалось бы какие сложности, явное приведение типа к int и всё. Но нет, проблема была не в этом. Имя константы получалось из строки, поэтому сначала надо было выбрать нужную константу, а затем уже получить её целочисленный код.

Естественно, проблема элементарно гуглится, и находится уйма ответов.

Здесь записываю пример, который я написала для студента, чтобы не забыть и не потерять. Вопрос наверняка ещё не раз возникнет, а может быть использую код на семинарах.

Поскольку я помнила про 20 перечислений, то выбрала обобщённый метод для получения константы перечисления по её имени. Пример с цветами консоли.

class Program {
        // получение константы перечисления по её названию
        public static T EnumParse(string str) {
            return (T)Enum.Parse(typeof(T), str, true);
        }
        static void Main(string[] args) {            
            ConsoleColor myColor;
            foreach (string s in str) {
                try { 
                    myColor = EnumParse(s);
                    Console.ForegroundColor = myColor;
                    Console.WriteLine(s);
                }
                catch (ArgumentException ex) {
                    continue; // переходим к следующему элементу
                }
                
            }
           // получение номера константы перечисления   
           // int x = (int)myColor;
           //  Console.Write(x);
        }
    }
}


Комментариев нет:

Отправить комментарий