DirectCast 运算符 (Visual Basic)
介绍基于继承或实现的类型转换操作。
备注
在 Object 数据类型之间来回转换时,DirectCast 不使用 Visual Basic 运行时帮助器例程进行转换,因此它可以提供比 CType 更好一些的性能。
使用 DirectCast 关键字的方法与使用 CType 函数 (Visual Basic) 和 TryCast 运算符 (Visual Basic) 关键字相同。 提供一个表达式作为第一个参数,并提供要将该表达式转化为的类型作为第二个参数。 DirectCast 需要两个参数的数据类型之间的继承或实现关系。 这意味着一个类型必须继承自或实现另一个类型。
错误和失败
如果 DirectCast 检测到不存在继承或实现关系,则生成一个编译器错误。 但是不出现编译器错误并不能保证转换成功。 如果需要的转换为收缩转换,它可能在运行时失败。 如果发生这种状况,运行时会引发一个 InvalidCastException 错误。
转换关键字
以下是类型转换关键字的对比。
关键字 |
数据类型 |
参数关系 |
运行时失败 |
任何数据类型 |
必须在两种数据类型之间定义扩大转换或收缩转换 |
||
DirectCast |
任何数据类型 |
一个类型必须继承自或者实现另一个类型 |
|
仅引用类型 |
一个类型必须继承自或者实现另一个类型 |
示例
下面的示例演示 DirectCast 的两种用法,一种在运行时发生失败,另一种取得成功。
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)
在前面的示例中,q 的运行时类型为 Double。 CType 能够成功是因为 Double 可转换为 Integer。 但是,第一个 DirectCast 在运行时失败是因为 Double 的运行时类型与 Integer 没有继承关系,即使是可以进行转换。 第二个 DirectCast 成功是因为它从 Form 类型转换为 Control 类型,而 Form 继承自该类型。