Содержание
В программировании довольно часто происходит преобразование одних типов данных в другие. Более того, встречаются ситуации, когда преобразование происходит автоматически, например, при работе с базовыми типами данных. В приведенном ниже фрагменте когда мы не проводим никаких операций преобразования типов данных и, при этом, не получим ошибок и предупреждений:
int i = 10; double d = i;
В данном случае тип double имеет более широкий диапазон представления чисел, чем int, поэтому происходит неявное преобразование — значение переменной i преобразуется в тип double и, затем, присваивается переменной d. Если же мы попытаемся сделать наоборот — присвоить переменной типа int значение double, или вообще значение типа bool, то получим ошибку.
или
Во-первых, потому что типы bool и int не совместимы, а, во-вторых, double, как мы знаем, имеет более широкий диапазон представления чисел. Конечно, можно решить эти проблемы с преобразованием вручную, а можно пойти другим путем — использовать для преобразования класс Convert.
Класс Convert представляет нам возможность преобразовывать одни базовые типы в другие. Класс Convert поддерживает преобразование следующих типов данных: Boolean, Byte, SByte, Int16, Int32, Int64, UInt16, Char, UInt64, UInt32, Single, String, DateTime, Double, Decimal. Кроме того, класс Convert включает методы для поддержки других типов преобразований. У класса определены следующие статические методы, имеющие переопределенные версии:
To |
Преобразует заданное значение в эквивалентное значение Boolean. |
To |
Преобразует заданное значение в эквивалентное 8-битовое целое число без знака. |
To |
Преобразует заданное значение в значение типа Char |
To |
Преобразует заданное значение в значение типа DateTime |
To |
Преобразует заданное значение в эквивалентное десятичное число. |
To |
Преобразует заданное значение в эквивалентное число с плавающей запятой двойной точности. |
To |
Преобразует массив 8-разрядных целых чисел без знака в эквивалентное строковое представление, состоящее из шестнадцатеричных символов в верхнем регистре. |
To |
Преобразует заданное значение в эквивалентное 16-битовое целое число со знаком. |
To |
Преобразует заданное значение в эквивалентное 32-битовое целое число со знаком. |
To |
Преобразует заданное значение в эквивалентное 64-битовое целое число со знаком. |
To |
Преобразует заданное значение в эквивалентное 8-битовое целое число со знаком. |
To |
Преобразует заданное значение в эквивалентное число с плавающей запятой одиночной точности. |
To |
Преобразует указанное значение в эквивалентное строковое представление. |
To |
Преобразует заданное значение в эквивалентное 16-битовое целое число без знака. |
To |
Преобразует заданное значение в эквивалентное 32-битовое целое число без знака. |
To |
Преобразует заданное логическое значение в эквивалентное 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.