型別轉換表
更新:2007 年 11 月
將一種型別的值轉換成另一種大小相等或較大型別的值時,會發生擴展轉換。將一種型別的值轉換成另一種較小型別的值時,則會發生縮小轉換。這個主題中的表格將說明這兩種轉換型別的行為。
擴展轉換
下表說明不會造成資訊遺失的可執行擴展轉換。
型別 |
不會造成資料遺失的可轉換型別 |
---|---|
Byte |
UInt16、Int16、UInt32、Int32、UInt64、Int64、Single、Double、Decimal |
SByte |
Int16、Int32、Int64、Single、Double、Decimal |
Int16 |
Int32、Int64、Single、Double、Decimal |
UInt16 |
UInt32、Int32、UInt64、Int64、Single、Double、Decimal |
Char |
UInt16、UInt32、Int32、UInt64、Int64、Single、Double、Decimal |
Int32 |
Int64、Double、Decimal |
UInt32 |
Int64、Double、Decimal |
Int64 |
Decimal |
UInt64 |
Decimal |
Single |
Double |
有些轉換成 Single 或 Double 的擴展轉換可能會造成失去精確度。下表說明偶爾會造成資訊遺失的擴展轉換。
型別 |
可轉換型別 |
---|---|
Int32 |
Single |
UInt32 |
Single |
Int64 |
Single、Double |
UInt64 |
Single、Double |
Decimal |
Single、Double |
縮小轉換
轉換成 Single 或 Double 的縮小轉換可能會造成資訊遺失。如果目標型別無法正確表示來源的範圍,便會將產生的型別設定為常數 PositiveInfinity 或 NegativeInfinity。PositiveInfinity 的值是將正數除以零的結果,而且當 Single 或 Double 的值大於 MaxValue 欄位的值時,便會傳回此值。NegativeInfinity 的值是將負數除以零的結果,而且當 Single 或 Double 的值小於 MinValue 欄位的值時,便會傳回此值。從 Double 轉換為 Single 可能會造成 PositiveInfinity 或 NegativeInfinity。
對於其他資料型別而言,縮小轉換也可能造成資訊遺失。但是,如果轉換型別的值超出目標型別的 MaxValue 和 MinValue 欄位所指定的範圍,而且執行階段已檢查轉換,確定目標型別的值未超過 MaxValue 或 MinValue,便會擲回 OverflowException。使用 System.Convert 類別執行的轉換永遠是以這種方式進行檢查。如需執行已檢查轉換時不使用 System.Convert 的詳細資訊,請參閱有關明確轉換的章節。
下表列出使用 System.Convert 時會擲回 OverflowException 的轉換,或如果轉換型別的值超出結果型別所定義的範圍時的任何已檢查轉換。
型別 |
可轉換型別 |
---|---|
Byte |
Sbyte |
SByte |
Byte、UInt16、UInt32、UInt64 |
Int16 |
Byte、Sbyte、UInt16 |
UInt16 |
Byte、SByte、Int16 |
Int32 |
Byte、SByte、Int16、UInt16、UInt32 |
UInt32 |
Byte、SByte、Int16、UInt16、Int32 |
Int64 |
Byte、SByte、Int16、UInt16、Int32、UInt32、UInt64 |
UInt64 |
Byte、SByte、Int16、UInt16、Int32、UInt32、Int64 |
Decimal |
Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64 |
Single |
Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64 |
Double |
Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、UInt64 |