Преобразование типов данных с помощью класса System.Convert
Обновлен: Ноябрь 2007
Класс System.Convert предоставляет полный набор методов для поддерживаемых преобразований. Он обеспечивает не зависящий от языка способ выполнения преобразований и доступен во всех языках, предназначенных для среды CLR. В то время как различные языки программирования могут иметь различающиеся методы преобразования типов данных, класс Convert гарантирует, что все обычные преобразования доступны в универсальном формате. Этот класс выполняет расширяющие преобразования, а также преобразования несвязанных типов данных. Например, поддерживаются преобразования из типов String в числовые типы, из типов DateTime в типы String и из типов String в типы Boolean. Список доступных преобразований см. в списке методов класса Convert. Класс Convert выполняет преобразования с проверкой и всегда создает исключение, если данное преобразование не поддерживается. Часто исключение представляет собой исключение OverflowException. Список поддерживаемых преобразований содержится в таблицах преобразований типов.
Значение, которое требуется преобразовать, можно передать в один из соответствующих методов класса Convert и присвоить возвращаемое значение новой переменной. Например, в следующем коде класс Convert используется для преобразования значения String в значение Boolean.
Dim myString As String = "true"
Try
Dim myBool As Boolean = Convert.ToBoolean(myString)
Console.WriteLine(myBool)
Catch e As FormatException
Console.WriteLine("{0} is not a Boolean value.", myString)
End Try
' myBool has a value of True.
string myString = "true";
try
{
bool myBool = Convert.ToBoolean(myString);
Console.WriteLine(myBool);
}
catch (FormatException)
{
Console.WriteLine("{0} is not a Boolean value.", myString);
}
// myBool has a value of True.
Класс Convert полезен также в том случае, если имеется строка, которую нужно преобразовать в числовое значение. В следующем примере кода строка, содержащая числовые знаки, преобразуется в значение Int32.
Dim newString As String = "123456789"
Try
Dim myInt As Integer = Convert.ToInt32(newString)
Console.WriteLine(myInt)
Catch e As FormatException
Console.WriteLine("{0} does not represent a number.", newString)
Catch e As OverflowException
Console.WriteLine("{0} is out of range of the integer type.", _
newString)
End Try
' myInt has a value of 123456789.
string newString = "123456789";
try
{
int myInt = Convert.ToInt32(newString);
Console.WriteLine(myInt);
}
catch (FormatException)
{
Console.WriteLine("{0} does not represent a number.",
newString);
}
catch (OverflowException)
{
Console.WriteLine("{0} is out of range of the integer type.",
newString);
}
// myInt has a value of 123456789.
Класс Convert можно также использовать для сужающего преобразования, которое не может быть выполнено неявно в определенном языке программирования. В следующем примере кода показано сужающее преобразование из Int64 в Int32 с использованием метода Convert.ToInt32.
Dim myInt64 As Int64 = 123456789
Try
Dim myInt As Integer = Convert.ToInt32(myInt64)
Console.WriteLine(myInt)
Catch e As OverflowException
Console.WriteLine("Unable to convert {0} to an integer.", _
myInt64)
End Try
' MyInt has a value of 123456789.
Int64 myInt64 = 123456789;
try
{
int myInt = Convert.ToInt32(myInt64);
Console.WriteLine(myInt);
}
catch (OverflowException)
{
Console.WriteLine("Unable to convert {0} to a 32-bit integer.",
myInt64);
}
// myInt has a value of 123456789.
Иногда выполнение сужающего преобразования с помощью класса Convert изменяет значение преобразуемого элемента. В следующем примере кода значение типа Double преобразуется в значение Int32. В этом случае при преобразовании значение округляется с 42.72 до 43.
Dim myDouble As Double = 42.72
Try
Dim myInt As Integer = Convert.ToInt32(myDouble)
Console.WriteLine(myInt)
Catch e As OverflowException
Console.WriteLine("Unable to convert {0} to an integer.", myDouble)
End Try
' MyInt has a value of 43.
Double myDouble = 42.72;
try
{
int myInt = Convert.ToInt32(myDouble);
Console.WriteLine(myInt);
}
catch (OverflowException)
{
Console.WriteLine("Unable to convert {0} to an integer.", myDouble);
}
// myInt has a value of 43.