Вопрос студента сегодня пришёлся очень ко двору и в тему семинара (обобщения). Разбирались не долго, но мне вперёд наука: обращать внимание на дьявола в деталях.
У студента в курсовой работе 20 перечислений (Enum). Ему очень хотелось получать целочисленное значение, связанное с константой перечисления. Казалось бы какие сложности, явное приведение типа к int и всё. Но нет, проблема была не в этом. Имя константы получалось из строки, поэтому сначала надо было выбрать нужную константу, а затем уже получить её целочисленный код.
Естественно, проблема элементарно гуглится, и находится уйма ответов.
Здесь записываю пример, который я написала для студента, чтобы не забыть и не потерять. Вопрос наверняка ещё не раз возникнет, а может быть использую код на семинарах.
Поскольку я помнила про 20 перечислений, то выбрала обобщённый метод для получения константы перечисления по её имени. Пример с цветами консоли.
У студента в курсовой работе 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);
}
}
}
Комментариев нет:
Отправить комментарий