ArryList al_list=new ArryList();
al_list.add(1);
al_list.add(2);
 
Int64[] id_list = (Int64[])al_list.ToArray(typeof(Int64));
这个地方就报错:源数组中至少有一个元素未能被向下转换到目标数组类型。疑问int 类型和int64类型不是在数值大小上有区别,其它的不是一样用吗,我声明一个Int64 num=0;不是也可以用的吗请大侠出来赐教一下

解决方案 »

  1.   

    Int64[] id_list = al_list.OfType<int>().Select(x => (Int64)x).ToArray();
      

  2.   

    ArryList没有OfType<int>()的方法啊
      

  3.   


      System.Collections.ArrayList al_list = new System.Collections.ArrayList();
                    al_list.Add(1);
                    al_list.Add(2);                Int64[] id_list = al_list.Cast<Int64>().ToArray(); 
      

  4.   

    问题出在指定的转换类型上:al_list.ToArray(typeof(Int64));ArrayList中保存的对象是Object类型的. object类型的对象不可以通过强制转换成数值类型
    例如:           
    object o = 2;
    Int64 i = (Int64)o;//error:强制转换失败
    如果非得转换用convert吧.
      

  5.   

    因为Cast不能进行强制类型转换,Cast只能在基类和派生类直接进行转换,对于值类型的强制转换是不支持的。2楼的方法可行,或者用这个方法:Int64[] id_list = al_list.Cast<object>().Select(t => Convert.ToInt64(t)).ToArray();
    还有一个更好的方法:Int64[] id_list = new long[al_list.Count];
    al_list.ToArray(typeof(int)).CopyTo(id_list, 0);
      

  6.   


    ArrayList list = new ArrayList();
    list.Add(1);
    list.Add(2);
    Int64[] values = list.ToArray().Select(o => Convert.ToInt64(o)).ToArray();
    经过测试
      

  7.   

    本帖最后由 caozhy 于 2012-08-31 16:59:30 编辑
      

  8.   

    如果是2.0版本 就自己遍历吧,,其实 linq 也就是帮你封装好了,复杂度不能更小
      

  9.   


    ArryList al_list=new ArryList();
    al_list.add(Convert.ToInt64(1));
    al_list.add(Convert.ToInt64(1));Int64[] id_list=al_list.ToArray(typeof(Int64));