共用方式為


隱含和明確轉換 (Visual Basic)

隱含轉換不需要原始程式碼中的任何特殊語法。 在下列範例中,Visual Basic 會在將 的值指派給 k之前,隱含地將 的值q轉換成單精度浮點值。

Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = k

明確轉換會使用類型轉換關鍵詞。 Visual Basic 提供數個這類關鍵字,能夠強制括號中的表達式轉換為所需的數據類型。 這些關鍵詞的運作方式類似函式,但編譯程式會產生程式代碼內嵌,因此執行速度會比函數調用快一些。

在上述範例的下列延伸模組中, CInt 關鍵詞會將的值 q 轉換回整數,然後再將它指派給 k

' q had been assigned the value 432 from k.
q = Math.Sqrt(q)
k = CInt(q)
' k now has the value 21 (rounded square root of 432).

轉換關鍵詞

下表顯示可用的轉換關鍵詞。

類型轉換關鍵詞 將表達式轉換成數據類型 允許轉換表達式的數據類型
CBool 布爾數據類型 任何數值類型(包括ByteSByte和 列舉型別)、、 StringObject
CByte 位元組數據類型 任何數值類型(包括 SByte 和 列舉型別)、、BooleanStringObject
CChar Char 數據類型 StringObject
CDate 日期數據類型 StringObject
CDbl Double 資料類型 任何數值類型(包括ByteSByte和 列舉型別)、Boolean、、、 StringObject
CDec 十進位數據類型 任何數值類型(包括ByteSByte和 列舉型別)、Boolean、、、 StringObject
CInt 整數數據類型 任何數值類型(包括ByteSByte和 列舉型別)、Boolean、、、 StringObject
CLng Long 資料型別 任何數值類型(包括ByteSByte和 列舉型別)、Boolean、、、 StringObject
CObj 對象數據類型 任何類型
CSByte SByte 資料類型 任何數值類型(包括 Byte 和 列舉型別)、、BooleanStringObject
CShort 簡短數據類型 任何數值類型(包括ByteSByte和 列舉型別)、Boolean、、、 StringObject
CSng Single 資料類型 任何數值類型(包括ByteSByte和 列舉型別)、Boolean、、、 StringObject
CStr 字串數據類型 任何數值類型(包括ByteSByte和 列舉型別)、Boolean、、CharChar陣列、、 DateObject
CType 在逗號後面指定的類型 (, 轉換為基本數據類型時(包括基本類型的陣列),可使用的型別與相應轉換關鍵詞所允許的相同。

轉換成 複合數據類型時,其所實作的介面及其所繼承的類別

轉換成您已多載 CType的類別或結構時,該類別或結構
CUInt UInteger 資料類型 任何數值類型(包括ByteSByte和 列舉型別)、Boolean、、、 StringObject
CULng ULong 數據類型 任何數值類型(包括ByteSByte和 列舉型別)、Boolean、、、 StringObject
CUShort UShort 資料類型 任何數值類型(包括ByteSByte和 列舉型別)、Boolean、、、 StringObject

CType 函式

CType 函式會在兩個自變數上運作。 第一個是要轉換的表達式,第二個是目的地數據類型或對象類別。 請注意,第一個自變數必須是表達式,而不是類型。

CType內嵌函式,這表示編譯的程式代碼通常會進行轉換,而不會產生函數調用。 這可改善效能。

如需將 CType 與其他類型轉換關鍵字比較,請參閱 DirectCast 運算元TryCast 運算元

基本類型

下列範例示範 CType 的用法。

k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)

複合類型

您可以使用 CType 將值轉換成複合數據類型,以及轉換成基本型別。 您也可以使用它來強制物件類別至其中一個介面的類型,如下列範例所示。

' Assume class cZone implements interface iZone.
Dim h As Object
' The first argument to CType must be an expression, not a type.
Dim cZ As cZone
' The following statement coerces a cZone object to its interface iZone.
h = CType(cZ, iZone)

陣列類型

CType 也可以轉換陣列數據類型,如下列範例所示。

Dim v() As classV
Dim obArray() As Object
' Assume some object array has been assigned to obArray.
' Check for run-time type compatibility.
If TypeOf obArray Is classV()
    ' obArray can be converted to classV.
    v = CType(obArray, classV())
End If

如需詳細資訊和範例,請參閱 陣列轉換

定義 CType 的類型

您可以在您已定義的類別或結構上定義 CType。 這可讓您從類別或結構的型別來回轉換值。 如需詳細資訊和範例,請參閱 如何:定義轉換運算符

備註

與轉換關鍵詞搭配使用的值必須對目的地數據類型有效,否則會發生錯誤。 例如,如果您嘗試將Long轉換為Integer,則Long的值必須位於Integer數據類型的有效範圍內。

謹慎

如果來源類型不是衍生自目標類型,則指定CType從某類別類型轉換成另一個類別類型在執行期間會失敗。 這類失敗會擲回例外狀況 InvalidCastException

不過,如果其中一個型別是您已定義的結構或類別,而且您已在該結構或類別上定義 CType ,則如果符合 您 CType的需求,轉換可能會成功。 請參閱 如何:定義轉換運算元

執行明確轉換也稱為將表達式 轉換成 指定的數據類型或物件類別。

另請參閱