這個涉及到裝箱的問題,先看這樣寫
int i=10;
object o=(object)i;
這樣寫是沒有問題的,因為i是一個值型別,在顯示轉換或者隱式轉換時都會先建立一個object型別的引用,然後將i的值賦給該引用所指向的值。這個操作被稱為裝箱。
對於int[] a={1,2,3};object[] b=(object[])a;
a陣列中儲存的是1,2,3這三個實際的值,所以在轉換時,(object[])a無法將a所有的值型別物件“直接”轉換為引用型別,所以編譯器不會透過這個轉換,但這樣寫是沒問題的:
int[] iArray ={ 1, 2, 3 };
object[] oArray = new object[iArray.Length];
for (int i = 0; i
{
oArray[i] = (object)iArray;
}
對於string[] a={"1","2","3"};來說,string本身就是引用型別,a陣列中儲存的就是"1","2","3"這些元素的地址而非其值本身,所以可以直接轉化成object[]陣列。
這個涉及到裝箱的問題,先看這樣寫
int i=10;
object o=(object)i;
這樣寫是沒有問題的,因為i是一個值型別,在顯示轉換或者隱式轉換時都會先建立一個object型別的引用,然後將i的值賦給該引用所指向的值。這個操作被稱為裝箱。
對於int[] a={1,2,3};object[] b=(object[])a;
a陣列中儲存的是1,2,3這三個實際的值,所以在轉換時,(object[])a無法將a所有的值型別物件“直接”轉換為引用型別,所以編譯器不會透過這個轉換,但這樣寫是沒問題的:
int[] iArray ={ 1, 2, 3 };
object[] oArray = new object[iArray.Length];
for (int i = 0; i
{
oArray[i] = (object)iArray;
}
對於string[] a={"1","2","3"};來說,string本身就是引用型別,a陣列中儲存的就是"1","2","3"這些元素的地址而非其值本身,所以可以直接轉化成object[]陣列。