我们都知道ArrayList类中有个重要的方法是Add(),该方法用于向集合中添加元素,它有一个object类型的参数,表示通过该方法可以向集合中添加任意类型的项,由于ArrayList动态数组中的元素可以多样化,当使用foreach语句遍历ArrayList数组时,可能会给程序带来潜在的问题。

我们来讨论下,代码如下:

 class Program
{ //遍历arraylist出现的问题分析
static void Main(string[] args)
{
ArrayList arr = getArrayList();
foreach (int item in arr)
{
Console.WriteLine(item.ToString());
}
Console.ReadLine();
}
static ArrayList getArrayList()//声明getArrayList()的方法,返回arraylist的实例。
{
ArrayList arr = new ArrayList();
//动态数组的元素都为整型。
arr.Add();
arr.Add();
arr.Add();
return arr;
}
}

嗯,这样没有问题,那么要是这样呢?

 class Program
{ //遍历arraylist出现的问题分析
static void Main(string[] args)
{
ArrayList arr = getArrayList();
foreach (int item in arr)
{
Console.WriteLine(item.ToString());
}
Console.ReadLine();
}
static ArrayList getArrayList()//声明getArrayList()的方法,返回arraylist的实例。
{
ArrayList arr = new ArrayList();
//动态数组的元素都为整型。
arr.Add();
arr.Add();
arr.Add();
//添加浮点型的元素
arr.Add(2f);
//添加日期类型的元素
arr.Add(DateTime.Today);
//添加字符型元素
arr.Add("hello");
return arr;
}
}

嗯,出问题了,如下:

说指定的转化无效,选中它,快速监视,我们发现:

item的值是3,也就是第四个元素时 类型是int,而item的值是3对应的元素类型是float,要转换为int,那么必然会转化失败。

思考良久,发现可以在遍历ArrayList之前过滤一下,因此有了一下的解决办法。如下

 class Program
{ //遍历arraylist出现的问题分析
static void Main(string[] args)
{
ArrayList arr = getArrayList();
int[]intArray=arr.OfType<int>().ToArray<int>();
foreach (int item in intArray)
{
Console.WriteLine(item.ToString());
}
Console.ReadLine();
}
static ArrayList getArrayList()//声明getArrayList()的方法,返回arraylist的实例。
{
ArrayList arr = new ArrayList();
//动态数组的元素都为整型。
arr.Add();
arr.Add();
arr.Add();
//添加浮点型的元素
arr.Add(2f);
//添加日期类型的元素
arr.Add(DateTime.Today);
//添加字符型元素
arr.Add("hello");
return arr;
}
}

调试后,发现这样可以避免这样的问题发生。效果如下:

遍历ArrayList数组时可能存在的问题的更多相关文章

  1. JavaScript-//FOR/IN循环。当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处。

    <script> //FOR/IN循环.当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处. function getvalue(portfolio){ var ...

  2. 遍历php数组的几种方法

    第一.foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. <?php $urls= array('aaa','bbb','ccc','ddd'); foreach ...

  3. 以forin的方式遍历数组时进行删除操作的注意点

    今天在修改某项需求的时候,需要在遍历的时候将匹配项移除掉,采用的时forin的方式遍历,然后运行的时候却crash掉了 for (NSString*str in self.btnArray) { if ...

  4. php 中遍历数组时使用引用出现的问题

    今天在使用foreach遍历数组时发现,当使用&时会出现问题: $arr = array( array('id' => 100, 'error'=> 'aa'), array('i ...

  5. ArrayList中存储数组时需要注意到的问题

    因为数组的地址是不会发生变化的,每次在数组中的内容改变后,将数组添加到ArrayList中时,会导致ArrayList中的每个内容都是最后添加进去的数据.案例如下所示: Object []objs = ...

  6. jQuery中使用$.each()遍历数组时要注意的地方

    使用jQuery中 $.each()遍历数组,要遍历的数组不能为空(arry!="") 例如:           $.each(arry, function (i, item)  ...

  7. 遍历 ArrayList与Map集合

    import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * 遍历 ArrayList * @ ...

  8. List Arraylist 数组的区别

    数组.List和ArrayList的区别 数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单,比如: ]; //赋值 s[]=]=]="c"; //修 ...

  9. php数组声明、遍历、数组全局变量使用小结

    数组的本质:管理和操作一组变量,成批处理,下面为大家介绍下数组的分类.数组的分类及使用说明,感兴趣的朋友可以了解下哈   php教程:数组声明,遍历,数组全局变量  <? /* * 一.数组的概 ...

随机推荐

  1. 白话容器namespace

    进入正题之前是例行装X环节: 过年7天吃的,花了45天又回来了. 近年来容器大火,也正是因为容器,生生灭掉了一个IT岗位!哥也是被生生的逼上了邪路. 那究竟什么是容器呢? 就三个字:它就是个进程!(多 ...

  2. win7+idea+maven搭建spark源码阅读环境

    1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打 ...

  3. H.264学习笔记4——变换量化

    A.变换量化过程总体介绍 经过帧内(16x16和4x4亮度.8x8色度)和帧间(4x4~16x16亮度.4x4~8x8色度)像素块预测之后,得到预测块的残差,为了压缩残差信息的统计冗余,需要对残差数据 ...

  4. asterisk-java ami4 一些基本功能的例子

    比如:挂机,拨号,拨外线,保留通话,示闲,示忙等等.... 在api中可以获得这些方法说明 /**  * 给分机挂机  * @param Extension 要挂机的分机号  * @return  * ...

  5. 解决国内无法安装android sdk的问题

    在使用 Android SDK Manager 的时候,主要会连接到两个地址 dl.google.com 和 dl-ssl.google.com,key发现这两个地址都是无法正常访问的,如何解决呢? ...

  6. GET方法与POST方法的区别

    区别一:get重点在从服务器上获取资源,post重点在向服务器发送数据: 区别二:get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?" ...

  7. CAD参数绘制图案填充(网页版)

    绘制工程图,常常需要将某种图案填充到某一区域,例如剖面线的绘制.MxCAD提供了丰富的填充图案,可以利用这些图案进行快速填充. js中实现代码说明: function DrawPathToHatch2 ...

  8. VS调试debug的即时窗口的使用

    例:

  9. 字符串匹配算法之BM算法

    BM算法,全称是Boyer-Moore算法,1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了一种新的字符串匹配算法. BM算法定义了两个规则: ...

  10. shell脚本批量/单独启动、停止、重启java独立jar程序

    本人最近半年使用阿里dubbo做开发,并在公司内部大力进行推广,将原来一个笨重且不易于维护的大项目切分成多个相对独立的java程序,好处是显而易见的,但是随着切分的独立运行程序包越来越多,程序的部署变 ...