擴展和縮小轉換

更新: 2008 年 7 月

型別轉換必須考慮轉換結果是否在目的資料型別範圍之內。「擴展轉換」會變更資料型別的值,而此資料型別能夠與原始資料的任何可能值相符。「縮小轉換」會變更資料型別的值,而此資料型別可能無法存放一些可能值。

擴展轉換

下列資料表將說明標準的擴展轉換。

資料型別

擴展為資料型別 1

SByte

SByte, Short, Integer, Long, Decimal, Single, Double

Byte

Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Short

Short, Integer, Long, Decimal, Single, Double

UShort

UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Integer

Integer, Long, Decimal, Single, Double2

UInteger

UInteger, Long, ULong, Decimal, Single, Double2

Long

Long, Decimal, Single, Double2

ULong

ULong, Decimal, Single, Double2

Decimal

Decimal, Single, Double2

Single

Single, Double

Double

Double

任何列舉型別 (Enum)

其基礎整數類資料型別 (Integral Type),以及任何由這個基礎型別擴展出來的型別

Char

Char, String

Char 陣列

Char 陣列,String

任何型別

物件

所有的衍生型別 (Derived Type)

任何衍生的基底型別 (Base Type) 3

任何型別

其實作的所有介面

Nothing

所有的資料型別或物件型別

1 依定義,每個資料型別都會擴展至本身。

2 從 Integer、UInteger、Long、ULong 或 Decimal 轉換成 Single 或 Double,可能會導致精確度喪失,但決不會喪失其大小範圍。因此這些轉換並不會使資料遺漏。

3 由衍生型別擴展轉換成其中一種基底型別,可能會讓人覺得意外。原因是衍生型別包含有基底型別的所有成員,因此成為基底型別的執行個體。反過來說,基底型別並不包含衍生型別所定義的成員。

在執行階段中進行的擴展轉換一定會成功,且決不會造成資料遺漏。無論 Option Strict 陳述式 設定型別檢查 (Type Checking) 為 On 或 Off,您都可以執行隱含式擴展轉換。

縮小轉換

標準的縮小轉換包括:

  • 上述表格中擴展轉換的反向轉換 (不包括任何擴展至本身的型別)

  • 布林值 (Boolean) 與任何數字型別 (Numeric Type) 之間的雙向轉換

  • 從任何數字型別轉換為任何列舉型別 (Enum)

  • 字串與任何數字型別、Boolean 或 日期之間的雙向轉換

  • 從資料型別或物件型別轉換為從其衍生的型別

在執行階段中進行的縮小轉換不一定會成功,可能會失敗並造成資料遺漏。若目的資料型別無法接受轉換的值,就會發生錯誤。例如,數字轉換可能會導致溢位 (Overflow)。除非 Option Strict 陳述式 設定型別檢查為 Off,否則編譯器 (Compiler) 不會允許您執行隱含式縮小轉換。

注意事項:

從 For Each¡KNext 集合中的項目轉換至迴圈控制變數時,會隱藏縮小轉換錯誤。如需詳細資訊和範例,請參閱 For Each...Next 陳述式 (Visual Basic) 中的<縮小轉換>一節。

何時使用縮小轉換

當您知道將來源值轉換為目的資料型別時,不會產生錯誤或造成資料遺漏,就可以使用縮小轉換。例如,若您知道的 String 中包含有 "True" 或 "False",您就可以使用 CBool 關鍵字來將其轉換為 Boolean。

轉換時的例外狀況

因為擴展轉換一定會成功,所以不會有例外狀況。當縮小轉換失敗時,最可能擲回下列例外狀況:

如果類別或結構定義 CType 函式為來源或目標轉換運算子,CType 可能會擲回任何其認為適當的例外狀況。此外,CType 可能會呼叫 Visual Basic 函式或 .NET Framework 方法,並因此擲回各類例外狀況。

請參閱

工作

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

概念

Visual Basic 中的資料型別

隱含和明確轉換

轉換期間值的變更

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

陣列轉換

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

參考

資料型別摘要 (Visual Basic)

型別轉換函式

其他資源

Visual Basic 中的型別轉換

變更記錄

日期

記錄

原因

2008 年 7 月

加入關於縮小轉換和 For Each¡KNext 的備註。

客戶回函。