C#数组问题

_老吴 2012-08-24 04:38:24
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;不是也可以用的吗

请大侠出来赐教一下
...全文
796 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
靓收 2013-03-01
  • 打赏
  • 举报
回复

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));
_老吴 2012-09-03
  • 打赏
  • 举报
回复
我的是4.0版本的好吧
threenewbee 2012-08-31
  • 打赏
  • 举报
回复
Int64[] id_list = al_list.OfType<int>().Select(x => (Int64)x).ToArray();
_老吴 2012-08-31
  • 打赏
  • 举报
回复
居然没有人回复!!!汗⊙﹏⊙b汗
yonglaixiazaide 2012-08-31
  • 打赏
  • 举报
回复
如果是2.0版本 就自己遍历吧,,其实 linq 也就是帮你封装好了,复杂度不能更小
threenewbee 2012-08-31
  • 打赏
  • 举报
回复
可能是因为你使用的是C# 2.0或者以下版本。
那么你你只能写:
ArrayList list = new ArrayList();
list.Add(1);
list.Add(2);
Int64[] id_list = new Int64[list.Count];
for (int i = 0; i < id_list.GetLength(0); i++)
{
id_list[i] = (Int64)list[i];
}
youzelin 2012-08-31
  • 打赏
  • 举报
回复

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


经过测试
qldsrx 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
也不行,报指定的转换无效,我都抓狂了
[/Quote]
因为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);
_老吴 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

C# code

System.Collections.ArrayList al_list = new System.Collections.ArrayList();
al_list.Add(1);
al_list.Add(2);

Int64[] id_list = al_list.Cast<……
[/Quote]
也不行,报指定的转换无效,我都抓狂了
bladeblue 2012-08-31
  • 打赏
  • 举报
回复
问题出在指定的转换类型上:al_list.ToArray(typeof(Int64));

ArrayList中保存的对象是Object类型的. object类型的对象不可以通过强制转换成数值类型
例如:
object o = 2;
Int64 i = (Int64)o;//error:强制转换失败
如果非得转换用convert吧.
EnForGrass 2012-08-31
  • 打赏
  • 举报
回复

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();
_老吴 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

Int64[] id_list = al_list.OfType<int>().Select(x => (Int64)x).ToArray();
[/Quote]
ArryList没有OfType<int>()的方法啊

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧