转换概述

更新:2007 年 11 月

每个值都有与之关联的类型,此类型定义分配给该值的空间大小、它可以具有的可能值的范围以及可用的成员等属性。许多值可以表示为多种类型。例如,值 4 可以表示为整数或浮点值。转换可创建等同于旧类型值的新类型值,但却不必使两个对象保持恒等(或精确值)。除了支持隐式转换外,.NET Framework 还支持通过提供类型转换方法的 System.Convert 类进行显式转换。

说明:

个别语言可能也提供执行显式转换的方法。例如,C# 使用强制转换运算符;Visual Basic 使用编译器实现的转换函数,例如 CType、CInt 和 DirectCast。

公共语言运行库同时支持扩大转换和收缩转换。例如,表示为 32 位带符号整数的值可转换为 64 位的带符号整数。这是一个扩大转换的示例。相反的转换(从 64 位转换为 32 位)是收缩转换的示例。执行扩大转换时,信息永远不会丢失(但可能会降低精度);而在收缩转换过程中,则会丢失信息。有关扩大转换的列表,请参见类型转换表

下面的示例演示扩大转换,其中 Int32 值 MyInt 将被转换为 Int64 值。这种转换隐式完成,不使用 Convert 类,也不使用任何其他转换方法或运算符。

Dim MyInt As Integer = 1234567891
Dim MyBigInt As Long = MyInt
Console.WriteLine(MyBigInt)      ' Displays 1234567891
int MyInt = 1234567891;
long MyBigInt = MyInt;
Console.WriteLine(MyBigInt);           // Displays 1234567891

下面的示例演示收缩转换,其中 Int64 值 MyBigInt 将被转换为 Int32 值。在 C# 中,必须始终显式执行此类收缩转换;在 Visual Basic 中,如果设置了 Option Strict,则也必须显式执行这种转换。在此示例中,调用 ToInt32 方法执行转换。

Dim MyBigInt As Long = 1234567891
' exception handler: narrowing conversions can overflow
Try
   Dim MyInt As Integer = Convert.ToInt32(MyBigInt)
   Console.WriteLine(MyInt)         ' Displays 1234567891
Catch e As OverflowException
   Console.WriteLine("Unable to convert {0} to an integer.", _ 
                     MyBigInt)      
End Try   
long MyBigInt = 1234567891;
// exception handler: narrowing conversions can overflow
try
{
   int MyInt = Convert.ToInt32(MyBigInt);
   Console.WriteLine(MyBigInt);        // Displays 1234567891
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert {0} to an integer.", 
                     MyBigInt);
}   

请参见

概念

类型转换表

使用 System.Convert 转换数据类型

显式转换

参考

System.Convert

其他资源

使用基类型