共用方式為


隱含和明確轉換

更新:2007 年 11 月

「隱含轉換」在原始程式碼中不需要任何特殊語法。在下列範例中,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 提供數種這類關鍵字,會將括號中的運算式強制轉型為所要的資料型別。這些關鍵字的用法就像函式一樣,但編譯器會以內嵌 (Inline) 的方式產生程式碼,因此要比執行函式呼叫來得稍快些。

以下是先前範例的擴充部分,其中 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

Boolean 資料型別 (Visual Basic)

任何的數字型別 (包括 Byte、SByte 和列舉型別)、String、Object

CByte

Byte 資料型別 (Visual Basic)

任何的數字型別 (包括 SByte 和列舉型別)、Boolean、String、Object

CChar

Char 資料型別 (Visual Basic)

String, Object

CDate

Date 資料型別 (Visual Basic)

String, Object

CDbl

Double 資料型別 (Visual Basic)

任何的數字型別 (包括 Byte、SByte 和列舉型別)、Boolean、String、Object

CDec

Decimal 資料型別 (Visual Basic)

任何的數字型別 (包括 Byte、SByte 和列舉型別)、Boolean、String、Object

CInt

Integer 資料型別 (Visual Basic)

任何的數字型別 (包括 Byte、SByte 和列舉型別)、Boolean、String、Object

CLng

LONG 資料型別 (Visual Basic)

任何的數字型別 (包括 Byte、SByte 和列舉型別)、Boolean、String、Object

CObj

Object 資料型別

任何型別

CSByte

SByte 資料型別 (Visual Basic)

任何的數字型別 (包括 Byte 和列舉型別)、Boolean、String、Object

CShort

Short 資料型別 (Visual Basic)

任何的數字型別 (包括 Byte、SByte 和列舉型別)、Boolean、String、Object

CSng

字串資料型別 (Visual Basic)

任何的數字型別 (包括 Byte、SByte 和列舉型別)、Boolean、String、Object

CStr

String 資料型別 (Visual Basic)

任何的數字型別 (包括 Byte、SByte 和列舉型別)、Boolean、Char、Char 陣列、Date、Object

CType

跟在逗號 (,) 後的指定型別

當轉換為「基礎資料型別」(包括基礎型別的陣列) 時,和對應轉換關鍵字可用的型別相同

當轉換為「複合資料型別」時,則它實作的介面和繼承而來的類別皆可用

當轉換為您多載 CType 的類別或結構時,可用該類別或結構

CUInt

UInteger 資料型別

任何的數字型別 (包括 Byte、SByte 和列舉型別)、Boolean、String、Object

CULng

ULong 資料型別 (Visual Basic)

任何的數字型別 (包括 Byte、SByte 和列舉型別)、Boolean、String、Object

CUShort

UShort 資料型別 (Visual Basic)

任何的數字型別 (包括 Byte、SByte 和列舉型別)、Boolean、String、Object

CType 函式

CType 函式會操作兩個引數。首先是要轉換的運算式,接著是目的資料型別或物件類別。請注意,第一個引數必須是運算式,而非型別。

CType 是「內嵌函式」,這代表編譯的程式碼會進行轉換,而通常不會產生函式呼叫。這會增加效能。

如需 CType 與其他型別轉換關鍵字的比較,請參閱 DirectCastTryCast

基礎型別

以下範例將說明 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。這樣可以讓您對類別或結構的型別值進行來回轉換。如需詳細資訊和範例,請參閱 HOW TO:定義轉換運算子

注意事項:

使用轉換關鍵字的值必須對目的資料型別來說是有效的,否則會發生錯誤。例如,若您嘗試要將 Long 轉換為 Integer,Long 的值必須在 Integer 資料型別的有效範圍內。

警告:

如果來源型別並非衍生自目的型別,指定 CType 從某一類別型別轉換成另一個型別會於執行階段失敗。這類的失敗會擲回 InvalidCastException 例外狀況。

然而,如果其中一個型別是已經定義的結構或類別,而且您已經在該結構或類別上定義 CType,則當轉換滿足 CType 的需求時,便會成功執行。請參閱 HOW TO:定義轉換運算子

執行明確轉換也可視為是將運算式「轉型」(Casting) 為指定的資料型別或物件類別。

請參閱

工作

HOW TO:在 Visual Basic 中將物件轉換成其他型別

資料型別疑難排解

概念

轉換期間值的變更

字串與其他型別之間的轉換

Visual Basic 中的不具型別程式設計

參考

資料型別摘要 (Visual Basic)

型別轉換函式

其他資源

Visual Basic 中的型別轉換

結構:您自己的資料型別