首页 | 麦客学吧 | 视频教程 | FLASH小游戏 | 素材下载 | 常用工具
您当前的位置:首页 > 程序开发 > C# > 正文

C#中ArrayList.CopyTo()运行错误的解决方法

出处:麦客学吧 [2007-9-30 10:33:07] 点击数:417
  在开始讲解C#中ArrayList.CopyTo()运行错误的解决方法之前,先给大家看一段代码:
ArrayList list = new ArrayList(); 

  list.Add(1); 
  list.Add(2); 
  byte[] buf = new byte[2]; 
  list.CopyTo(buf); 

  这段代码看上去,好正常,编译也很顺利通过,不过执行的时候出错了,为什么?

  解剖ArrayList,其内部是用一个object 数组实现的,作为一切元素的容器,值类型必须转换成引用类型来储存,不然就不需要2.0的Generic出现了。 而CopyTo函数内部是用Array.Copy()来实现的,问题就出在它身上。当我们添加常量值到list里面,例如 list.Add(1),这里的1被看成是int,box储存在object后再unbox回int,于是就变成高精度向低精度复制了 int[]->byte[],就出错了,相当于如下代码:
  int[] a1 = new int[2]{1,2}; 

  byte[] a2 = new byte[2]; 
  Array.Copy( a1, a2, 2 ); 

  回过头来,原来的代码要修改也很简单,只要box之前把它变成小精度类型就可以了,修改后的代码如下:
  ArrayList list = new ArrayList(); 

  list.Add((byte)1); 
  list.Add((byte)2); 
  byte[] buf = new byte[2]; 
  list.CopyTo(buf); 

【责任编辑: lanier

昵 称:麦客网友[游客]  如果您不想匿名评论请先登录注册
评 论:请自觉遵守互联网相关政策法规,管理员有权删除恶意评论、广告和违禁词语。

验证码: 验证码,看不清楚?请点击刷新验证码    
麦客酷站赏析频道

精彩图文推荐

关于本站 - 联系站长 - 广告服务 - 合作伙伴 - 网站地图 - 版权声明 - 报告错误 - 收藏本站 | Http://www.MaiCoo.com

Copyright © 2005 - 2008 MaiCoo.com All Rights Reserved

违法和不良信息举报中心 本站服务器空间和带宽由雷克斯网络提供赞助
浙ICP备06017818号