錯誤4:注意隱性的數據類型轉換
Boxing和unboxing是使值型數據類型被當作索引型數據類型使用的二個過程。值型變量可以被包裝進一個對象中,然后再被解包回值型變量。包括內置數據類型在內的所有C#中的數據類型都可以被隱性地轉化為一個對象。包裝一個值型變量就會生成一個對象的實例,然后將變量拷貝到實例中。
Boxing是隱性的,如果在需要索引型數據類型的地方使用了值型數據類型的變量,值型變量就會隱性地轉化為索引型數據類型的變量。Boxing會影響代碼執(zhí)行的性能,因此應當盡量避免,尤其是在數據量較大的時候。
如果要將一個打包的對象轉換回原來的值型變量,必須顯性地對它進行解包。解包需要二個步驟:首先對對象實例進行檢查,確保它們是由值型的變量被包裝成的;第二步將實例中的值拷貝到值型變量中。為了確保解包成功,被解包的對象必須是通過打包一個值型變量的值生成的對象的索引。
using System;
public class UnboxingTest
{
public static void Main()
{
int i = 123;
//打包
object o = i;
// 解包(必須是顯性的)
int j = (int) o;
Console.WriteLine("j: {0}", j);
}
}
如果被解包的對象是無效的,或是一個不同數據類型對象的索引,就會產生InvalidCastException異外。
Boxing和unboxing是使值型數據類型被當作索引型數據類型使用的二個過程。值型變量可以被包裝進一個對象中,然后再被解包回值型變量。包括內置數據類型在內的所有C#中的數據類型都可以被隱性地轉化為一個對象。包裝一個值型變量就會生成一個對象的實例,然后將變量拷貝到實例中。
Boxing是隱性的,如果在需要索引型數據類型的地方使用了值型數據類型的變量,值型變量就會隱性地轉化為索引型數據類型的變量。Boxing會影響代碼執(zhí)行的性能,因此應當盡量避免,尤其是在數據量較大的時候。
如果要將一個打包的對象轉換回原來的值型變量,必須顯性地對它進行解包。解包需要二個步驟:首先對對象實例進行檢查,確保它們是由值型的變量被包裝成的;第二步將實例中的值拷貝到值型變量中。為了確保解包成功,被解包的對象必須是通過打包一個值型變量的值生成的對象的索引。
using System;
public class UnboxingTest
{
public static void Main()
{
int i = 123;
//打包
object o = i;
// 解包(必須是顯性的)
int j = (int) o;
Console.WriteLine("j: {0}", j);
}
}
如果被解包的對象是無效的,或是一個不同數據類型對象的索引,就會產生InvalidCastException異外。