Преобразование типов данных с помощью класса Convert

В программировании довольно часто происходит преобразование одних типов данных в другие. Более того, встречаются ситуации, когда преобразование происходит автоматически, например, при работе с базовыми типами данных. В приведенном ниже фрагменте когда мы не проводим никаких операций преобразования типов данных и, при этом, не получим ошибок и предупреждений:

int i = 10;
double d = i;

В данном случае тип double имеет более широкий диапазон представления чисел, чем int, поэтому происходит неявное преобразование — значение переменной i преобразуется в тип double и, затем, присваивается переменной d. Если же мы попытаемся сделать наоборот — присвоить переменной типа int значение double, или вообще значение типа bool, то получим ошибку.

Не удается неявно преобразовать тип «double» в «int». Существует явное преобразование (возможно, пропущено приведение типов).

или

Не удается неявно преобразовать тип «bool» в «int».

Во-первых, потому что типы bool и int не совместимы, а, во-вторых, double, как мы знаем, имеет более широкий диапазон представления чисел. Конечно, можно решить эти проблемы с преобразованием вручную, а можно пойти другим путем — использовать для преобразования класс Convert.

Класс Convert представляет нам возможность преобразовывать одни базовые типы в другие. Класс Convert поддерживает преобразование следующих типов данных:  Boolean, Byte, SByte, Int16, Int32, Int64, UInt16, Char, UInt64, UInt32, Single, String, DateTimeDouble, Decimal. Кроме того, класс Convert включает методы для поддержки других типов преобразований. У класса определены следующие статические методы, имеющие переопределенные версии:

ToBoolean() Преобразует заданное значение в эквивалентное значение Boolean.
ToByte() Преобразует заданное значение в эквивалентное 8-битовое целое число без знака.
ToChar() Преобразует заданное значение в значение типа Char
ToDateTime() Преобразует заданное значение в значение типа DateTime
ToDecimal() Преобразует заданное значение в эквивалентное десятичное число.
ToDouble() Преобразует заданное значение в эквивалентное число с плавающей запятой двойной точности.
ToHexString() Преобразует массив 8-разрядных целых чисел без знака в эквивалентное строковое представление, состоящее из шестнадцатеричных символов в верхнем регистре.
ToInt16() Преобразует заданное значение в эквивалентное 16-битовое целое число со знаком.
ToInt32() Преобразует заданное значение в эквивалентное 32-битовое целое число со знаком.
ToInt64() Преобразует заданное значение в эквивалентное 64-битовое целое число со знаком.
ToSByte() Преобразует заданное значение в эквивалентное 8-битовое целое число со знаком.
ToSingle() Преобразует заданное значение в эквивалентное число с плавающей запятой одиночной точности.
ToString() Преобразует указанное значение в эквивалентное строковое представление.
ToUInt16() Преобразует заданное значение в эквивалентное 16-битовое целое число без знака.
ToUInt32() Преобразует заданное значение в эквивалентное 32-битовое целое число без знака.
ToUInt64() Преобразует заданное логическое значение в эквивалентное 64-битовое целое число без знака.

Часть методов вызывают исключение InvalidCastException. Это исключение возникает в том случае, когда никаким образом нельзя преобразовать одно значение в другое. Например при попытке преобразования Boolean в DateTime.

Рассмотрим несколько примеров использования класса Convert для преобразования значений из одного типа данных в другой.

Примеры использования класса Convert

Преобразование double в int

double d = 12.53;
int i = Convert.ToInt32(d);//13
double d = 12.43;
int i = Convert.ToInt32(d);//12

Преобразование double в DateTime

Следующий код вызовет исключение InvalidCastException

double d = 12.43;
DateTime i = Convert.ToDateTime(d); //ошибка - метод не поддерживается
Console.WriteLine(i);

Что касается преобразования из какого-либо типа в DateTime, то Convert поддерживает только преобразования из string и object.

Преобразование числа в bool

Используя Convert мы можем преобразовывать любые числа в тип bool. При этом, действует правило — если число равно нулю, то метод вернет false, в остальных случаях  — true. Например,

double d = 1.222;
bool i = Convert.ToBoolean(d);//true	

int x = -1;
bool y = Convert.ToBoolean(x);//true	

sbyte z = 0;
bool k = Convert.ToBoolean(z);//false

Итого

Класс Convert представляет ряд статических методов для преобразования значений из одних базовых типов в другие. При этом, ряд методов, определенных в Convert могут вызывать исключения типа InvalidCastException , если типы данных несовместимы, например, при попытке преобразовать double в DateTime.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии