Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

...

// Выводит строку "Contractor = 100".

Console.WriteLine("{0} = {1}", emp.ToString, (byte)emp);

Console.ReadLine;

На заметку! Статический метод

Enum.Format
предлагает более высокий уровень форматирования за счет указания флага желаемого формата. Полный список флагов форматирования ищите в документации.

В типе

System.Enum
определен еще один статический метод
по имени
GetValues
, возвращающий экземпляр класса
System.Array
. Каждый элемент в массиве соответствует члену в указанном перечислении. Рассмотрим следующий метод, который выводит на консоль пары "имя-значение" из перечисления, переданного в качестве параметра:

// Этот метод выводит детали любого перечисления.

static void EvaluateEnum(System.Enum e)

{

Console.WriteLine("=> Information about {0}", e.GetType.Name);

// Вывести лежащий в основе тип хранилища.

Console.WriteLine("Underlying storage type: {0}",

Enum.GetUnderlyingType(e.GetType));

// Получить все пары "имя-значение" для входного параметра.

Array enumData = Enum.GetValues(e.GetType);

Console.WriteLine("This enum has {0} members.", enumData.Length);

// Вывести строковое имя и ассоциированное значение,

// используя флаг формата D (см. главу 3).

for(int i = 0; i < enumData.Length; i++)

{

Console.WriteLine("Name: {0}, Value: {0:D}",

enumData.GetValue(i));

}

}

Чтобы протестировать метод

EvaluateEnum
, модифицируйте код для создания переменных нескольких типов перечислений, объявленных в пространстве имен
System
(вместе с перечислением
EmpTypeEnum
):

Console.WriteLine("**** Fun with Enums *****");

...

EmpTypeEnum e2 = EmpType.Contractor;

// Эти типы являются перечислениями из пространства имен System.

DayOfWeek day = DayOfWeek.Monday;

ConsoleColor cc = ConsoleColor.Gray;

EvaluateEnum(e2);

EvaluateEnum(day);

EvaluateEnum(cc);

Console.ReadLine;

Ниже показана часть вывода:

=> Information about DayOfWeek

Underlying storage type: System.Int32

This enum has 7 members.

Name: Sunday, Value: 0

Name: Monday, Value: 1

Name: Tuesday, Value: 2

Name: Wednesday, Value: 3

Name: Thursday, Value: 4

Name: Friday, Value: 5

Name: Saturday, Value: 6

В

ходе чтения книги вы увидите, что перечисления широко применяются во всех библиотеках базовых классов .NET Core. При работе с любым перечислением всегда помните о возможности взаимодействия с парами "имя-значение", используя члены класса
System.Enum
.

Использование перечислений, флагов и побитовых операций

Побитовые операции предлагают быстрый механизм для работы с двоичными числами на уровне битов. В табл. 4.3 представлены побитовые операции С#, описаны их действия и приведены примеры.

Чтобы взглянуть на побитовые операции в действии, создайте новый проект консольного приложения по имени

FunWithBitwiseOperations
. Поместите в файл
Program.cs
следующий код:

using System;

using FunWithBitwiseOperations;

Console.WriteLine("===== Fun wih Bitwise Operations");

Console.WriteLine("6 & 4 = {0} | {1}", 6 & 4, Convert.ToString((6 & 4),2));

Console.WriteLine("6 | 4 = {0} | {1}", 6 | 4, Convert.ToString((6 | 4),2));

Console.WriteLine("6 ^ 4 = {0} | {1}", 6 ^ 4, Convert.ToString((6 ^ 4),2));

Console.WriteLine("6 << 1 = {0} | {1}", 6 << 1, Convert.ToString((6 << 1),2));

Console.WriteLine("6 >> 1 = {0} | {1}", 6 >> 1, Convert.ToString((6 >> 1),2));

Console.WriteLine("~6 = {0} | {1}", ~6, Convert.ToString(~((short)6),2));

Console.WriteLine("Int.MaxValue {0}", Convert.ToString((int.MaxValue),2));

Console.readLine;

Ниже показан результат выполнения этого кода:

===== Fun wih Bitwise Operations

6 & 4 = 4 | 100

6 | 4 = 6 | 110

6 ^ 4 = 2 | 10

6 << 1 = 12 | 1100

6 >> 1 = 3 | 11

~6 = -7 | 11111111111111111111111111111001

Int.MaxValue 1111111111111111111111111111111

Теперь, когда вам известны основы побитовых операций, самое время применить их к перечислениям. Добавьте в проект новый файл по имени

ContactPreferenceEnum.cs
и приведите его код к такому виду:

Поделиться:
Популярные книги

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Попаданка

Ахминеева Нина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка

Возлюби болезнь свою

Синельников Валерий Владимирович
Научно-образовательная:
психология
7.71
рейтинг книги
Возлюби болезнь свою

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Ротмистр Гордеев 2

Дашко Дмитрий
2. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев 2

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Жребий некроманта 3

Решетов Евгений Валерьевич
3. Жребий некроманта
Фантастика:
боевая фантастика
5.56
рейтинг книги
Жребий некроманта 3

Город драконов

Звездная Елена
1. Город драконов
Фантастика:
фэнтези
6.80
рейтинг книги
Город драконов

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец