vb.net中三种转换 <CType> <DirectCast> <TryCast>

vb.net中三种转换[CType/DirectCast/TryCast],到了C#下面TryCast对应as,但是DirectCast +TryCast都变成了(type)var 一种形式, 
看来vb.net和C#不完全相等啊,不知道大家怎么理解

三种转换看这个列表就能知道区别了: 
CType 函数 
任何数据类型 
必须在两种数据类型之间定义扩大转换或收缩转换 
引发 InvalidCastException 

DirectCast 
任何数据类型 
一个类型必须继承自或者实现另一个类型 
引发 InvalidCastException 

TryCast 
仅引用类型 
一个类型必须继承或者实现另一个类型 
返回 Nothing (Visual Basic)


MSDN中说得更详细: 
========================= from MSDN========================================================== 
-------------------------------------------------------------------------------------------------------------- 
--------------------------------------------------------------------------------------------------------------

DirectCast

在 Object 数据类型之间来回转换时,DirectCast 不使用 Visual Basic 运行时帮助器例程进行转换,因此它可以提供比 CType 更好一些的性能。

使用 DirectCast 关键字的方法与使用 CType 函数 和 TryCast 关键字相同。提供一个表达式作为第一个参数,提供一个类型以将它转换为第二个参数。DirectCast 需要两个参

数的数据类型之间的继承或实现关系。这意味着一个类型必须继承或实现另一个类型。

错误和失败 
如果 DirectCast 检测到不存在继承或实现关系,则生成一个编译器错误。但是没有出现编译器错误并不能保证肯定进行了成功的转换。如果需要的转换为收缩转换,则可能在运

行时失败。如果发生这种状况,运行库会引发一个 InvalidCastException 错误。

转换关键字 
类型转换关键字的对比如下。

关键字 
数据类型 
参数关系 
运行时失败 

CType 函数 
任何数据类型 
必须在两种数据类型之间定义扩大转换或收缩转换 
引发 InvalidCastException 

DirectCast 
任何数据类型 
一个类型必须继承自或者实现另一个类型 
引发 InvalidCastException 

TryCast 
仅引用类型 
一个类型必须继承或者实现另一个类型 
返回 Nothing (Visual Basic) 

示例 
下面的示例演示 DirectCast 的两种用法,一种在运行时发生失败,另一种取得成功。

Visual Basic 复制代码 
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 继承自该类型。 
-------------------------------------------------------------------------------------------------------------- 
-------------------------------------------------------------------------------------------------------------- 
CType 函数

更新:2007 年 11 月

返回表达式显式地转换为指定数据类型、对象、结构、类或接口后的结果。


CType(expression, typename)

各部分说明 
expression 
任何有效的表达式。如果 expression 的值超出 typename 允许的范围,Visual Basic 将引发异常。

typename 
任何在 Dim 语句的 As 子句内合法的表达式,即任何数据类型、对象、结构、类或接口的名称。

备注 
CType 采用内联方式编译,即转换代码是计算表达式的代码的一部分。在某些情况下不需要调用一个过程来完成转换,这会使执行速度更快。

如果没有定义从 expression 到 typename 的转换,例如从 Integer 转换到 Date,Visual Basic 将显示一条编译时错误信息。

如果在运行时转换失败,将会引发相应的异常。如果收缩转换失败,最常见的结果是 OverflowException。如果未定义转换,将会发生 InvalidCastException。例如,如果

expression 的类型为 Object,并且其运行时类型没有转换为 typename,则可能会发生这种情况。

如果 expression 或 typename 的数据类型为已经定义的类或结构,则可以在该类或结构中将 CType 定义为转换运算符。这将使 CType 用作重载运算符。如果这样做,则可以控

制转换在类或结构之间进行的转换的行为,包括可能引发的异常。

重载 
CType 运算符也可以在代码之外定义的类或结构中重载。如果您的代码需要在这样的类或结构之间进行转换,请确定您了解其 CType 运算符的行为。有关更多信息,请参见运算符

过程。

示例 
下面的示例使用 CType 函数将表达式转换为指定的数据类型。

Visual Basic 复制代码 
Dim testNumber As Long = 1000 
' The following line of code sets testNewType to 1000.0. 
Dim testNewType As Single = CType(testNumber, Single)


-------------------------------------------------------------------------------------------------------------- 
-------------------------------------------------------------------------------------------------------------- 
TryCast

引入不引发异常的类型转换操作。

备注 
如果尝试转换失败,则 CType 和 DirectCast 都会引发 InvalidCastException 错误。这将给应用程序的性能造成负面影响。TryCast 返回 Nothing (Visual Basic),因此只需

测试返回的结果是否为 Nothing,而无需处理可能产生的异常。

使用 TryCast 关键字的方法与使用 CType 函数和 DirectCast 关键字的方法相同。提供一个表达式作为第一个参数,并提供要将其转换成的类型作为第二个参数。TryCast 仅适

用于引用类型,如类和接口。它要求这两种类型之间的关系为继承或实现。这意味着一个类型必须继承自或实现另一个类型。

错误和失败 
如果 TryCast 检测到不存在任何继承或实现关系,它将生成一个编译器错误。但是不出现编译器错误并不能保证转换成功。如果需要的转换为收缩转换,它可能在运行时失败。如

果发生这种情况,TryCast 返回 Nothing (Visual Basic)。

转换关键字 
以下是类型转换关键字的对比。

关键字 数据类型 参数关系 运行时失败 
CType 函数 
任何数据类型 
必须在两种数据类型之间定义扩大转换或收缩转换 
引发 InvalidCastException 

DirectCast 
任何数据类型 
一个类型必须继承自或者实现另一个类型 
引发 InvalidCastException 

TryCast 
仅引用类型 
一个类型必须继承自或者实现另一个类型 
返回 Nothing (Visual Basic)。 

示例 
下面的示例显示如何使用 TryCast。

Visual Basic 复制代码 
Function PrintTypeCode(ByVal obj As Object) As String 
Dim objAsConvertible As IConvertible = TryCast(obj, IConvertible) 
If objAsConvertible Is Nothing Then 
Return obj.ToString() & " does not implement IConvertible" 
Else 
Return "Type code is " & objAsConvertible.GetTypeCode() 
End If 
End Function 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值