我想知道VB.NET中的TryCast
和DirectCast
。他们之间有什么区别?
答案 0 :(得分:2)
TryCast
和DirectCast
(或CType
)之间的主要区别在于CType
和DirectCast
都会抛出Exception
,具体而言如果转换失败,则为InvalidCastException
。这是一种潜在的“昂贵”操作。
相反,如果指定的强制转换失败或无法执行,TryCast
运算符将返回Nothing
,而不会抛出任何异常。这可能会稍微好一点。
TryCast
,DirectCast
和CType
的MSDN文章说得最好:
如果尝试转换失败,
CType
和DirectCast
都抛出了InvalidCastException
错误。这个可以 对性能产生不利影响 你的申请。TryCast
返回Nothing
(Visual Basic),这样 而不是必须处理一个可能的 例外,你只需要测试一下 返回Nothing的结果。
还有:
DirectCast
不使用Visual 基本的运行时辅助程序 转换,所以它可以提供一些 比CType
更好的表现 转换为数据类型Object
。
答案 1 :(得分:0)
简而言之:
如果正在播放的类型不是指定的类型, TryCast
将返回一个设置为Nothing
的对象。
DirectCast
将抛出异常。
DirectCast
优于TryCast
的优势是DirectCast
使用的资源更少,性能更佳。
代码示例:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim auto As Car = New Car()
' animalItem will be Nothing
Dim animalItem As Animal = GetAnimal_TypeCast(auto)
Dim cat As Cat = New Cat()
' animalItem will be Cat as it's of type Animal
animalItem = GetAnimal_TypeCast(cat)
Try
animalItem = GetAnimal_DirectCast(auto)
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message)
End Try
End Sub
Private Function GetAnimal_TypeCast(ByVal animalType As Object) As Object
Dim animalBase As Animal
' This will produce an object set to Nothing if not of type Animal
animalBase = TryCast(animalType, Animal)
Return animalBase
End Function
Private Function GetAnimal_DirectCast(ByVal animalType As Object) As Object
Dim animalBase As Animal
' This will throw an exception if not of type Animal
animalBase = DirectCast(animalType, Animal)
Return animalBase
End Function