Книга: C# 4.0: полное руководство

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

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

В 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 = 0x1, OffLine = 0x2,
    Waiting = 0x4, TransmitOK = 0x8,
    ReceiveOK = 0x10, OnLine = 0x20
  }
  static void Main() {
    Direction d = Direction.West;
    Console.WriteLine("{0:G}", d);
    Console.WriteLine("{0:F}", d);
    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
00000009

Оглавление книги


Генерация: 1.517. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз