轉型的奧妙

摘要:轉型的奧妙



在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發問喔。