981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 Время выполнения: 00:00:00.0140000 Время выполнения: 0:00:00.014 Время выполнения: 0:00:00:00.0140000 Время выполнения: 0.014 секунды
Форматирование перечислений
В C# допускается также форматировать значения, определяемые в перечислении. Вообще говоря, значения из перечисления могут отображаться как по имени, так и по значению. Спецификаторы формата перечислений сведены в табл. ”22.10. Обратите особое внимание на форматыGи F. Перед перечислениями, которые должны представлять битовые поля, следует указывать атрибутFlags.Как правило, в битовых полях хранятся значения, обозначающие отдельные двоичные разряды и упорядоченные по степени числа 2. При наличии атрибутаFlagsимена всех битовых составляющих форматируемого значения, если, конечно, это действительное значение, отображаются с помощью спецификатораG.А с помощью спецификатораFотображаются имена всех битовых составляющих форматируемого значения, если оно составляется путем логического сложения по ИЛИ двух или более полей, определяемых в перечислении.
Таблица 22.10. Спецификаторы формата перечислений Спецификатор Назначение
D Отображает значение в виде десятичного целого числа
d То же, что и D
F Отображает имя значения. Если это значение можно создать путем логиче
ского сложения по ИДИ двух или более полей, определенных в перечислении, то данный спецификатор отображает имена всех битовых составляющих заданного значения, причем независимо оттого, задан атрибут Flags или нет
f То же, что и F
G Отображает имя значения. Если перед форматируемым перечислением ука
зывается атрибут Flags, то данный спецификатор отображает имена всех битовых составляющих заданного значения, если, конечно, это допустимое значение g То же, что и G
X Отображает значение в виде шестнадцатеричного целого числа. Для отобра
жения как минимум восьми цифр форматируемое значение дополняется (при необходимости) начальными нулями х_То же, что и X_
В приведенной ниже программе демонстрируется применение спецификаторов формата перечислений.
// Отформатировать перечисление.
using System;
class EnumFmtDemo {
enum Direction { North, South, East, West }
[Flags] enum Status { Ready=0xl, OffLine=Ox2,
Waiting=0x4, TransmitOK=Ox8,
ReceiveOK=OxlO, OnLine=0x20 }
static void Main() {
Direction d = Direction.West;
Console.WriteLine("{0:G}", d);
Console.WriteLine("{0:F}", d); 1
Console.WriteLine("{0:D}", d);
Console.WriteLine("{0:X}", d) ;
Status s = Status.Ready | Status.TransmitOK;
Console.WriteLine("{0:G}", s);
Console.WriteLine("{0:F}", s);
Console.WriteLine("{0:D}", s);
Console.WriteLine("{0:X}", s);
}
}
Ниже приведен результат выполнения этой программы.
West
West
3
00000003
Ready, TransmitOK Ready, TransmitOK 9
ГЛАВА 23 Многопоточное программирование. Часть первая: основы