轉換概觀
更新:2007 年 11 月
每個值都有相關聯的型別,該型別定義屬性,例如配置給值的空間數、能夠擁有的可能值範圍,以及提供的成員。許多值都可以表示成多種型別。例如,數值 4 就可以表示成整數值或浮點 (Floating-Point) 值。轉換時會建立新型別的值,與舊型別的值相等,但是不一定會保留兩個物件的識別 (Identity) (或實際的值)。除了支援隱含轉換之外,.NET Framework 還支援透過 System.Convert 類別的明確轉換,其提供型別之間轉換的方法。
注意事項: |
---|
個別語言也可能會提供執行明確轉換的方式。例如,C# 使用轉型 (Casting) 運算子、Visual Basic 使用編譯器實作的轉換函式,例如 CType、CInt 和 DirectCast。 |
Common Language Runtime 可支援擴展轉換和縮小轉換。例如,以 32 位元帶正負號的整數 (Signed Integer) 表示的數值可轉換成 64 位元帶正負號的整數。這是擴展轉換的範例。相反的轉換 (從 64 位元轉換成 32 位元) 則是縮小轉換的範例。擴展轉換的結果資訊便不會遺失 (雖然精確度可能會),不過資訊可能會在縮小轉換的過程中遺失。如需擴展轉換清單,請參閱型別轉換表。
下列範例會說明擴展轉換,此處 Int32 值 MyInt 會轉換成 Int64 值。這個轉換是以隱含的方式達成,而不使用 Convert 類別,或是任何其他轉換方法或運算子。
Dim MyInt As Integer = 1234567891
Dim MyBigInt As Long = MyInt
Console.WriteLine(MyBigInt) ' Displays 1234567891
int MyInt = 1234567891;
long MyBigInt = MyInt;
Console.WriteLine(MyBigInt); // Displays 1234567891
下列範例會說明縮小轉換,此處 Int64 值 MyBigInt 會轉換成 Int32 值。這類縮小轉換必須在 C# 中明確執行,而如果 Option Strict 設為 On,則同樣必須在 Visual Basic 中明確執行。本範例中會呼叫 ToInt32 方法執行轉換。
Dim MyBigInt As Long = 1234567891
' exception handler: narrowing conversions can overflow
Try
Dim MyInt As Integer = Convert.ToInt32(MyBigInt)
Console.WriteLine(MyInt) ' Displays 1234567891
Catch e As OverflowException
Console.WriteLine("Unable to convert {0} to an integer.", _
MyBigInt)
End Try
long MyBigInt = 1234567891;
// exception handler: narrowing conversions can overflow
try
{
int MyInt = Convert.ToInt32(MyBigInt);
Console.WriteLine(MyBigInt); // Displays 1234567891
}
catch (OverflowException)
{
Console.WriteLine("Unable to convert {0} to an integer.",
MyBigInt);
}