什么是TryCast并在VB.NET中直接演员?

时间:2010-08-28 15:20:29

标签: vb.net

  

可能重复:   Why use TryCast instead of DirectCast?

我想知道VB.NET中的TryCastDirectCast。他们之间有什么区别?

2 个答案:

答案 0 :(得分:2)

TryCastDirectCast(或CType)之间的主要区别在于CTypeDirectCast都会抛出Exception,具体而言如果转换失败,则为InvalidCastException。这是一种潜在的“昂贵”操作。

相反,如果指定的强制转换失败或无法执行,TryCast运算符将返回Nothing,而不会抛出任何异常。这可能会稍微好一点。

TryCastDirectCastCType的MSDN文章说得最好:

  

如果尝试转换失败,   CTypeDirectCast都抛出了   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