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;不是也可以用的吗

请大侠出来赐教一下
...全文
328 点赞 收藏 12
写回复
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版本的好吧
回复 点赞
Int64[] id_list = al_list.OfType<int>().Select(x => (Int64)x).ToArray();
回复 点赞
_老吴 2012年08月31日
居然没有人回复!!!汗⊙﹏⊙b汗
回复 点赞
yonglaixiazaide 2012年08月31日
如果是2.0版本 就自己遍历吧,,其实 linq 也就是帮你封装好了,复杂度不能更小
回复 点赞
可能是因为你使用的是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>()的方法啊
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告