隱含轉換不需要原始程式碼中的任何特殊語法。 在下列範例中,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 |
布爾數據類型 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、、 String Object |
CByte |
位元組數據類型 | 任何數值類型(包括 SByte 和 列舉型別)、、Boolean 、 String Object |
CChar |
Char 數據類型 |
String 、Object |
CDate |
日期數據類型 |
String 、Object |
CDbl |
Double 資料類型 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、Boolean 、、、 String Object |
CDec |
十進位數據類型 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、Boolean 、、、 String Object |
CInt |
整數數據類型 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、Boolean 、、、 String Object |
CLng |
Long 資料型別 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、Boolean 、、、 String Object |
CObj |
對象數據類型 | 任何類型 |
CSByte |
SByte 資料類型 | 任何數值類型(包括 Byte 和 列舉型別)、、Boolean 、 String Object |
CShort |
簡短數據類型 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、Boolean 、、、 String Object |
CSng |
Single 資料類型 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、Boolean 、、、 String Object |
CStr |
字串數據類型 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、Boolean 、、Char Char 陣列、、 Date Object |
CType |
在逗號後面指定的類型 (, ) |
轉換為基本數據類型時(包括基本類型的陣列),可使用的型別與相應轉換關鍵詞所允許的相同。 轉換成 複合數據類型時,其所實作的介面及其所繼承的類別 轉換成您已多載 CType 的類別或結構時,該類別或結構 |
CUInt |
UInteger 資料類型 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、Boolean 、、、 String Object |
CULng |
ULong 數據類型 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、Boolean 、、、 String Object |
CUShort |
UShort 資料類型 | 任何數值類型(包括Byte 、 SByte 和 列舉型別)、Boolean 、、、 String Object |
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
的需求,轉換可能會成功。 請參閱 如何:定義轉換運算元。
執行明確轉換也稱為將表達式 轉換成 指定的數據類型或物件類別。
另請參閱
- 在 Visual Basic 中的 類型轉換
- 字串與其他類型之間的轉換
- 如何:在 Visual Basic 中將物件轉換成另一種類型
- 結構
- 數據類型
- 類型轉換函式
- 數據類型疑難解答