共用方式為


擴大和縮小轉換 (Visual Basic)

類型轉換的重要考慮是轉換的結果是否在目的地數據類型的範圍內。

擴大轉換會將值變更為數據類型,以允許原始數據的任何可能值。 擴大轉換會保留來源值,但可以變更其表示法。 這種情況會發生在您將整數類型轉換為 DecimalChar 轉換為 String 時。

縮小轉換會將值變更為可能無法保存某些可能值的數據類型。 例如,當小數點值轉換成整數類型時會四捨五入,而要轉換成 Boolean 的數值型別會縮減為 TrueFalse

擴大轉換

下表顯示標準擴展轉換。

數據類型 擴展至數據類型 1
SByte SByteShortIntegerLongDecimalSingleDouble
位元組 ByteShortUShortIntegerUIntegerLongULongDecimalSingleDouble
簡短 ShortIntegerLongDecimalSingleDouble
UShort UShortIntegerUIntegerLongULongDecimalSingleDouble
整數 IntegerLongDecimalSingleDouble2
UInteger UIntegerLongULongDecimalSingleDouble2
Long、、DecimalSingleDouble2
ULong ULong、、DecimalSingleDouble2
十進位 Decimal、、SingleDouble2
單一 SingleDouble
Double
任何列舉型別 (列舉 其基礎整數型別和基礎類型擴展至的任何型別。
字符 CharString
Char 陣列 Char 陣列 String
任何類型 物件
任何衍生類型 其衍生來源的任何基底類型 3
任何類型 它實作的任何介面。
任何數據類型或物件類型。

1 根據定義,每個數據類型都會擴大為本身。

2Integer、、UIntegerLongULongDecimal 轉換成 SingleDouble 的轉換可能會導致精確度遺失,但永遠不會遺失大小。 從這個意義上說,它們不會產生資訊遺失。

3 從衍生型別轉換成其中一個基底類型被視為擴展,這似乎令人驚訝。 理由是衍生類型包含基底類型的所有成員,因此它會限定為基底類型的實例。 相反的方向,基底類型不包含衍生型別所定義的任何新成員。

擴展轉換在運行時總是成功,且永不會導致數據丟失。 無論 Option Strict 語句 將類型檢查開關設定為 OnOff,您都可以隱含地執行它們。

縮小轉換

標準縮小轉換包括下列各項:

  • 上表中的擴大轉換的反向方向(除了每種類型都擴大到自身之外)

  • 布爾值與任何數值類型之間的任一方向轉換

  • 從任何數值型別轉換成任何列舉型別 (Enum

  • 字串與任何數值類型、Boolean日期之間的任一方向轉換

  • 從數據類型或物件類型轉換成衍生自它的型別

縮小轉換不一定會在運行時間成功,而且可能會失敗或產生數據遺失。 如果目的地數據類型無法接收正在轉換的值,就會發生錯誤。 例如,數值轉換可能會導致溢位。 除非 Option Strict 語句 將類型檢查開關設定為 Off,否則編譯器不允許隱式地執行縮小型別轉換。

備註

隱藏縮小轉換錯誤,以便從集合中的 For Each…Next 項目轉換成迴圈控件變數。 如需詳細資訊和範例,請參閱「For Each...Next 語句」的「Narrowing Conversions」一節。

使用縮小轉換的時機

當您知道來源值可以轉換成目的地數據類型時,您就會使用縮小轉換,而不會發生錯誤或數據遺失。 例如,如果您知道 String 包含「True」或「False」,您可以使用 CBool 關鍵詞將其轉換成 Boolean

轉換期間的例外狀況

因為擴大轉換一律會成功,所以不會引發例外狀況。 縮小轉換失敗時,最常拋出下列例外狀況:

如果類別或結構定義 CType 函 式來做為該類別或結構的轉換運算符, CType 則可能會擲回它認為適當的任何例外狀況。 此外,CType 可能會呼叫 Visual Basic 函式或 .NET Framework 方法,而這些方法可能會引發各種例外狀況。

參考類型轉換過程中的改變

參考類型 的轉換只會複製指向值的指標。 值本身不會以任何方式複製或變更。 唯一可以變更的是持有指標之變數的數據類型。 在下列範例中,數據類型會從衍生類別轉換成其基類,但兩個變數現在指向的物件都未變更。

' Assume class cSquare inherits from class cShape.  
Dim shape As cShape  
Dim square As cSquare = New cSquare  
' The following statement performs a widening  
' conversion from a derived class to its base class.  
shape = square  

另請參閱