.NET 中的類型轉換表
將一種類型的值轉換成另一種大小相等或較大類型的值時,就會發生擴展轉換。 將一種類型的值轉換成另一種大小較小類型的值時,就會發生縮小轉換。 本主題中的表格將說明這兩種轉換類型的行為。
放大轉換
下表描述可執行且不會導致資訊遺失的擴展轉換。
類型 | 不會造成資料遺失的可轉換類型 |
---|---|
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, UInt64, 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 擲回 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 |