轉型的奧妙

摘要:轉型的奧妙



在Visual Basic中,大家都習慣使用Ctype作轉型,但是轉型其實還有其他作法。

DirectCast

根據MSDN說明:
DirectCast 不會將 Visual Basic 執行階段 Helper 常式用於轉換,因此在資料型別 Object 間進行轉換時,它可提供的效能比 CType 還好

DirectCast 需要這兩個引數之資料型別之間的繼承實作關聯性。這表示其中一個型別必須繼承自另一個型別或實作另一個型別。

如果 DirectCast 偵測到沒有繼承或實作關聯性存在,則會產生編譯器錯誤。但沒有編譯器錯誤並不保證轉換成功。

下列的程式在編譯的時候就會出現錯誤。


 Function xxx(ByVal str As String) As String
        Return DirectCast(str, Integer)
    End Function


TryCast

根據MSDN說明:


如果轉換嘗試失敗,CType 和 DirectCast 兩者會擲回 InvalidCastException 錯誤。這可能會對應用程式效能造成不利影響。

TryCast 傳回 Nothing (Visual Basic),如此即不必處理可能的例外狀況,只需要針對 Nothing 測試傳回的結果



它需要兩個型別之間的

繼承

實作 (Implementation) 關係

。這表示其中一個型別

必須繼承

自另一個型別或實作另一個型別。



如果 TryCast 未偵測到繼承或實作關聯性,則會

產生編譯器錯誤

。但沒有編譯器錯誤並不保證轉換成功。



下列的程式在編譯的時候就會出現錯誤。



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

 

 

如果您有微軟技術開發的問題,可以到MSDN Forum發問。

如果您有微軟IT管理的問題,可以到TechNet Forum發問喔。