转换概述
更新: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);
}