现在遇见个拆箱的问题,请各位帮忙解答一下    ArrayList snakarr=new ArrayList();
Point[] p=new Point[5];
int k=10;
for(int i=0;i<5;i++)

p[i].X=20;
p[i].Y=k;
k++;
} snakarr.Add(p); Point front=(Point)snakarr[0];//在这里会出现转换无效的异常拆箱操作不能用在结构体上吗?那我要用动态数组存放一些点的坐标该如何操作呢?请各位帮忙指点一下

解决方案 »

  1.   

    p是一个Point的数组啊,即Array类,Array对象转换成Point当然会出错了
    这样子用
    Point front=((Point[])snakarr[0])[0];
    或者你的本意不是将数组添进arraylist里,那应该这样ArrayList snakarr=new ArrayList(); 
    Point p=new Point;
    int k=10; 
    for(int i=0;i <5;i++) 

    p[i].X=20; 
    p[i].Y=k; 
    k++; 
    snakarr.Add(p); 
    } Point front=(Point)snakarr[0];
      

  2.   

    非常感谢coodd,我一直以为snakarr.Add(p); 能自动把p[0]传给snakarr[0],p[1]传给snakarr[1]呢,原来add中传的是什么之间会被转换装箱为Object啊听你一番话才搞明白,解决了好多天的问题了,谢谢。
      

  3.   

    ArrayList snakarr=new ArrayList(); 改为泛型版本的List<Point> snakarr = new List<Point>(); 可能更好些,不用装箱和拆箱,性能更高。
      

  4.   

    可是我用的是1.1   好像List <Point> snakarr 需要2.0支持吧?
      

  5.   

    泛型类 List <Point> 确实需要2.0支持,泛型是 2.0 的新特性之一。