c#中int数组怎么转成object数组

int[] a={1,2,3};object[] b=(object[])a;
程序会报错。
string[] a={"1","2","3"};object[] b=(object[])a;
程序可以编译通过。
这是什么道理。

一只名叫tom的猫
浏览 1899回答 3
3回答

POPMUISE

这个涉及到装箱的问题,先看这样写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[]数组。

蝴蝶刀刀

所有东西都是继承于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];}

牛魔王的故事

有以下几种方法&nbsp;&nbsp;&nbsp;&nbsp;(1)可以通过重新定义来进行转换:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object[] arr = new object[] arr[iarr.Length];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0;i<iarr.Length;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr[i] = iarr[i];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;(2) 通过list间接转换&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List arr = new List(iarr);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List.ToArray()2. 由于存储结构的问题,c#不能直接对数组进行转换,建议通过List来代替数组这种低级类型。List的好处很多,如:&nbsp;&nbsp;&nbsp;&nbsp;(1) 可自动改变大小&nbsp;&nbsp;&nbsp;&nbsp;(2)&nbsp;线程安全&nbsp;&nbsp;&nbsp;&nbsp;(3) 提供多种实用函数3.参考书目:&nbsp;&nbsp;&nbsp;&nbsp;c#高级编程
打开App,查看更多内容
随时随地看视频慕课网APP