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

В 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

Более 800 000 книг и аудиокниг! 📚

Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением

ПОЛУЧИТЬ ПОДАРОК