2.2数据类型转换 2.2.1扩大转换 将—种数据类型改变为另一种数据类型的过程称为数据类型转换。如表2- 4描述了可以执行的且不会丢失信息的扩大转换。 表2-4 VB. NET的扩展转换标准 匚歎据类型 扩展到下列数据类型。 Byte UTtl6、It16、UInt32、Int32、UInt64、In64、 Single、 Double、 Decimal SByte中 Int16、Int2、It64、 Single、 Double、 Decimal Int16+ Int32、Int64、 Single、 Double、 Decimal UInt16. UIt32、It32、UIt64、Int64、 Single、 Double、 Decimal Char t UIt16、UIt32、Int32、UInt64、it64、 Single、 Double、 Decimal Int32 t It64、 Double、 Decimal UInt32- Int64、 Double、 Decimal Int64 P Decimal UInt64+ Decimal e Single Double+ 些目标为 Single或 Double的扩大转换可能会导致丢失精度。如 nt32、UInt32扩大转换为Snge Int64、UInt64、 Decimal扩大转换为 Single或 Double
2.2 数据类型转换 2.2.1 扩大转换 将一种数据类型改变为另一种数据类型的过程称为数据类型转换。如表2- 4描述了可以执行的且不会丢失信息的扩大转换。 一些目标为Single或Double的扩大转换可能会导致丢失精度。如: Int32、UInt32 扩大转换为Single ; Int64、UInt64、Decimal 扩大转换为Single或Double
222收缩转换 标准的收缩转换包括 如表2-4中扩大转换的反向转换 Boolean和任何数字类型之间的转换。 任何数字类型到任何枚举类型 Char(数组和 String之间的转换。 String和任何数字类型( Boolean或Date)之间的转换 从数据类型或对象类型到其派生类型的转换 收缩转换并不总是成功,它们可能会在运行时失败。如果目 标数据类型无法接收正在转换的值,将会出错。例如, Integer 型数据到 Short型的转换就可能导致溢出
2.2.2 收缩转换 标准的收缩转换包括: 如表2-4中扩大转换的反向转换。 Boolean和任何数字类型之间的转换。 任何数字类型到任何枚举类型。 Char()数组和String之间的转换。 String和任何数字类型(Boolean或Date)之间的转换。 从数据类型或对象类型到其派生类型的转换。 收缩转换并不总是成功,它们可能会在运行时失败。如果目 标数据类型无法接收正在转换的值,将会出错。例如,Integer 型数据到Short型的转换就可能导致溢出
223隐式转换和显式转换 隐式转换在源代码中不需要仼何特殊语法。在下例中 VB.NET将 FIntVar的整型值隐式转换为 Sng Var的单精度浮点数。 Dim IntVar As Integer Sng Var As SingleIntVar =123 IngVar= IntVar执行显式转换即所谓的将表达式的类型强制 转换为给定的数据类型或对象类。 显式转换使用类型转换关键字。VB.NE提供多个类似的关 键字,如表2-5所示。通过这些关键字强制将括号中的表达式 转换为目标数据类型。这些关键字的行为类似函数,但编译器 生成内联代码,所以执行速度比使用函数要稍快一些
2.2.3 隐式转换和显式转换 隐式转换在源代码中不需要任何特殊语法。在下例中, VB.NET将IntVar的整型值隐式转换为SngVar的单精度浮点数。 Dim IntVar As Integer,SngVar As SingleIntVar = 123 SngVar = IntVar 执行显式转换即所谓的将表达式的类型强制 转换为给定的数据类型或对象类。 显式转换使用类型转换关键字。VB.NET提供多个类似的关 键字,如表2-5所示。通过这些关键字强制将括号中的表达式 转换为目标数据类型。这些关键字的行为类似函数,但编译器 生成内联代码,所以执行速度比使用函数要稍快一些
表25 VB. NET的类型转换关键字 类型转换关键字目标数据类型。 允许的源表达式数据类型 cBool B ocean e 任何数字类型(包括枚举类型)、Stig和 object: CLitea B te 任何数字类型、任何枚举类型、 Boolean、 String和 Object CHare Char e Stng、 objecto CDate+ Date p String、 object. CDb Double e 任何数字类型(包括枚举的类型)、 Boolean、 String、 Object CDec+ Decimal e 任何数字类型(包括枚举的类型)、 Boolean、Stig、 Objecte CInte I steger 任何数字类型(包括枚举的类型)、 Boolean、 String、 Objecto COnge Long t 任何数字类型(包括枚举的类型)、 Boolean、 String、 objecta cobj Objects 任何类型 SHorts Short e 任何数字类型(包括枚举的类型)、 Boolean、 String、 object COnga Single 任何数字类型(包括枚举的类型)、 Boolean、 String、 object CStr Strng e 任何数字类型、 Boolean、Char、Cha0数组、Dte和 object CType 逗号后指定的类型用转换关键字的相同类型
例如 IntVar=123K= CShort( Intvar)'表达式 CShort ( Intvar)为 Short数据类型 K= Ctype( Intvar, Short)'表达式 Ctype( Intvar,Sho)为 Short数据类型 注意:与转换关键字一起使用的值对于目标数据类型必须是 有效的,否则将出错。例如,如果试图将Long转换为 Integer, 则Long的值必须在 Integer数据类型的有效范围内。 NET2005中还可用 Conve类中的若干转换方法进行显式 转换,如 Dim dOuble As Double 15.0Console. WriteLine( double 0],Convert. ToInt64(Double))
例如: IntVar = 123 K = CShort (IntVar) ‘表达式CShort (IntVar)为Short数据类型 K = Ctype(IntVar,Short) ‘表达式Ctype(IntVar,Short)为 Short数据类型 注意:与转换关键字一起使用的值对于目标数据类型必须是 有效的,否则将出错。例如,如果试图将Long转换为Integer, 则Long的值必须在Integer数据类型的有效范围内。 .NET 2005中还可用Convert 类中的若干转换方法进行显式 转换,如: Dim xDouble As Double = 15.0Console.WriteLine("Double: {0}", Convert.ToInt64(xDouble))