Поделиться через


Преобразование типов данных с помощью класса 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.

См. также

Основные понятия

Явное преобразование

Другие ресурсы

Преобразование типов