ПриМеЧание
Можно.объявить.перечисление,.различные.идентификаторы.которого.имеют.оди-
наковое.числовое.значение .В.процессе.преобразования.числового.значения.в.сим-
вол.посредством.общего.форматирования.методы.типа.вернут.один.из.символов,.
правда,.неизвестно.какой .Если.соответствия.не.обнаруживается,.возвращается.
строка.с.числовым.значением
Статический метод
GetValues
типа
System.Enum
и метод
GetEnumValues
экзем-
пляра
System.Type
создают массив, элементами которого становятся символьные
имена перечисления. И каждый элемент содержит соответствующее числовое
значение:
407
Перечислимые.типы
public static Array GetValues(Type enumType); // Определен в System.Enum
public Array GetEnumValues(); // Определен в System.Type
Этот метод вместе с методом
ToString
позволяет вывести все идентификаторы
и числовые значения перечисления:
Color[] colors = (Color[]) Enum.GetValues(typeof(Color));
Console.WriteLine("Number of symbols defined: " + colors.Length);
Console.WriteLine("Value\tSymbol\n-----\t------");
foreach (Color c in colors) {
// Выводим каждый идентификатор в десятичном и общем форматах
Console.WriteLine("{0,5:D}\t{0:G}", c);
}
Результат выполнения этого кода выглядит так:
Number of symbols defined: 5
Value Symbol
----- ------
0 White
1 Red
2 Green
3 Blue
4 Orange
Лично мне методы
GetValues
и
GetEnumVal
не нравятся, потому что они воз-
вращают объект
Array
, который приходится преобразовывать к соответствующему
типу массива. Я всегда определяю собственный метод:
public static TEnum[] GetEnumValues() where TEnum : struct {
return (TEnum[])Enum.GetValues(typeof(TEnum));
}
Обобщенный метод
GetEnumValues
улучшает безопасность типов на стадии
компиляции и упрощает первую строку кода в предыдущем примере до следую-
щего вида:
Color[] colors = GetEnumValues();
Мы рассмотрели некоторые интересные операции, применимые к перечислимым
типам. Полагаю, что показывать символьные имена элементов пользовательского
интерфейса (раскрывающихся списков, полей со списком и т. п.) чаще всего вы
будете с помощью метода
ToString
с использованием общего формата (если выво-
димые строки не требуют локализации, которая не поддерживается перечислимыми
типами). Помимо метода
GetValues
, типы
System.Enum
и
System.Type
предостав-
ляют еще два метода для получения символических имен перечислимых типов:
// Возвращает строковое представление числового значения
public static String GetName(Type enumType, Object value); // Определен
// в System.Enum
public String GetEnumName(Object value); // Определен в System.Type
// Возвращает массив строк: по одной на каждое
продолжение
408
Do'stlaringiz bilan baham: |