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