3 回答

TA貢獻1765條經驗 獲得超5個贊
這個涉及到裝箱的問題,先看這樣寫
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 < iArray.Length; i++)
{
oArray[i] = (object)iArray;
}
對于string[] a={"1","2","3"};來說,string本身就是引用類型,a數組中存儲的就是"1","2","3"這些元素的地址而非其值本身,所以可以直接轉化成object[]數組。

TA貢獻1801條經驗 獲得超8個贊
所有東西都是繼承于objec類,不過你這個object[] b=(object[])a;是顯示轉轉換,隱式轉換是object[] b=a;
還有所有Object 類中都包含ToString() 而沒有ToInt之類的.....
你的int[] a={1,2,3}要想轉換成object[] b;
int[] a ={1,2,3,4};
object[] b=new object [a.Length];
for (int i = 0; i < a.Length; i++)
{
b[i] = (object)a[i];
}

TA貢獻1830條經驗 獲得超3個贊
- 3 回答
- 0 關注
- 1957 瀏覽
添加回答
舉報