Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы C#.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
609 Кб
Скачать
☆

Основы c#. Урок 67. Конвертация типов через класс Convert

Класс Convert служит для конвертиции различных типов друг в друга. Вот так, например, можно сконвертировать строковое представление числа или булевского значения в само число или булевское значение:

string s = "1234";

int a = Convert.ToInt32(s);

bool b = Convert.ToBoolean("true");

В переменные a и b запишутся число 1234 и значение true соответственно.

Это был довольно-таки тривиальный пример. Но часто форматирование некоторого объекта зависит от региональных настроек. Например, в США в датах пишут сначала месяц, а потом число, а в России - наоборот. В этом случае мы используем метод ChangeType класса Convert, который принимает в качестве одного из параметров форматтер для конкретного региона (культуры). Вот пример:

IFormatProvider formatRu = new System.Globalization.CultureInfo("ru-RU", true);

IFormatProvider formatUS = new System.Globalization.CultureInfo("en-US", true);

DateTime f = (DateTime)Convert.ChangeType("11/12/2007", typeof(DateTime), formatRu);

f = (DateTime)Convert.ChangeType("11/12/2007", typeof(DateTime), formatUS);

После первого вызова в переменную f запишется 11 декабря, а после второго - 12 ноября.

Основы c#. Урок 68. Работа с перечислениями (enum)

Перечисления (enum) - это определенный программистом тип, который может принимать только ограниченный набор значений. Типичный пример - это дни недели (их всего семь). Или, например, типы доступа с чему-либо (полный доступ, доступ только на чтение и отсутствие доступа).

Вот примеры определения перечисления:

public enum MyColors : byte

{

Red,

Yellow,

Green

}

public enum Values

{

Seven = 7,

Eight = 8,

Ten = 10

}

В первом вы видите необязательную часть - это указание типа, на котором основано перечисление (byte в нашем случае). Во втором тоже есть необязательная часть - это числовые величины для значений перечисления.

А вот пример использования первого перечисления:

// Использлование enum.

MyColors color = MyColors.Green;

// Получение строки из значения enum'а.

Console.WriteLine(color.ToString());

// Получение значения enum'а из строки.

MyColors mycolor = (MyColors)Enum.Parse(typeof(MyColors), "Red");

// Получение всех строковых значений enum'а.

string[] s = Enum.GetNames(typeof(MyColors));

// Получение всех значений enum'а.

Array ar = Enum.GetValues(typeof(MyColors));

MyColors col = (MyColors)ar.GetValue(1);

// Получение типа, на котором основан enum.

Type type = Enum.GetUnderlyingType(typeof(MyColors));

Как вы видите, вы пожете не только работать с переменными, имеющими тип вашего перечисления, но и получаеть информацию о самом типе (например, получить все значения перечисляемого типа (в том числе сразу в виде строкового массива) или получить тип, на котором перечисление основано (byte в нашем случае)).

Основы c#. Урок 69. Использование атрибута Flags для перечисления

Перед перечислением можно поставить атрибут Flags. Это означает, что мы сможем работать с таким перечислением как с набором битов. В частности, мы сможем использовать битовые операции.

Вот пример такого использования:

[Flags()]

public enum MilitaryType{

Marine = 1,

Land = 2,

Cosmic = 4,

MarineAndLand = Marine | Land,

AllType = Marine | Land | Cosmic

}

class Program

{

static void Main(string[] args)

{

MilitaryType type0 = MilitaryType.Land | MilitaryType.Cosmic;

Console.WriteLine(type0); //Выведется "Land, Cosmic"

Object o = Enum.Parse(typeof(MilitaryType), "Marine, Cosmic");

MilitaryType type1 = (MilitaryType)o;

}

}

Как вы видите, мы записали в переменную type0 результат побитовой операции двух переменных перечисляемого типа MilitaryType. В следующей строке мы выводим на консоль результат. На экран выведется "Land, Cosmic" (как следствие применения к MilitaryType атрибута Flags.

Обратное преоразование тоже действует. Так, мы с помощью метода Parse записываем в наше перечисление типа MilitaryType преобразованную строку "Marine, Cosmic". В результате этого в type1 окажется значение MilitaryType.Marine | MilitaryType.Cosmic.

Также обратите внимание, что для записи простых (т. е. не являющихся комбинацией других) значений в перечисление с атрибутом Flags надо использовать для их величин степени двойки.