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

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

  1. class Program
  2. { //遍历arraylist出现的问题分析
  3. static void Main(string[] args)
  4. {
  5. ArrayList arr = getArrayList();
  6. foreach (int item in arr)
  7. {
  8. Console.WriteLine(item.ToString());
  9. }
  10. Console.ReadLine();
  11. }
  12. static ArrayList getArrayList()//声明getArrayList()的方法,返回arraylist的实例。
  13. {
  14. ArrayList arr = new ArrayList();
  15. //动态数组的元素都为整型。
  16. arr.Add();
  17. arr.Add();
  18. arr.Add();
  19. return arr;
  20. }
  21. }

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

  1. class Program
  2. { //遍历arraylist出现的问题分析
  3. static void Main(string[] args)
  4. {
  5. ArrayList arr = getArrayList();
  6. foreach (int item in arr)
  7. {
  8. Console.WriteLine(item.ToString());
  9. }
  10. Console.ReadLine();
  11. }
  12. static ArrayList getArrayList()//声明getArrayList()的方法,返回arraylist的实例。
  13. {
  14. ArrayList arr = new ArrayList();
  15. //动态数组的元素都为整型。
  16. arr.Add();
  17. arr.Add();
  18. arr.Add();
  19. //添加浮点型的元素
  20. arr.Add(2f);
  21. //添加日期类型的元素
  22. arr.Add(DateTime.Today);
  23. //添加字符型元素
  24. arr.Add("hello");
  25. return arr;
  26. }
  27. }

嗯,出问题了,如下:

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

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

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

  1. class Program
  2. { //遍历arraylist出现的问题分析
  3. static void Main(string[] args)
  4. {
  5. ArrayList arr = getArrayList();
  6. int[]intArray=arr.OfType<int>().ToArray<int>();
  7. foreach (int item in intArray)
  8. {
  9. Console.WriteLine(item.ToString());
  10. }
  11. Console.ReadLine();
  12. }
  13. static ArrayList getArrayList()//声明getArrayList()的方法,返回arraylist的实例。
  14. {
  15. ArrayList arr = new ArrayList();
  16. //动态数组的元素都为整型。
  17. arr.Add();
  18. arr.Add();
  19. arr.Add();
  20. //添加浮点型的元素
  21. arr.Add(2f);
  22. //添加日期类型的元素
  23. arr.Add(DateTime.Today);
  24. //添加字符型元素
  25. arr.Add("hello");
  26. return arr;
  27. }
  28. }

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

遍历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. [BZOJ1004][HNOI2008]Cards 群论+置换群+DP

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1004 首先贴几个群论相关定义和引理. 群:G是一个集合,*是定义在这个集合上的一个运算. ...

  2. spark源码编译,运行example遇到:NoClassDefFoundError: org/spark_project/guava/cache/CacheLoader

    基本环境: win10+idea Scala2.11.8 maven3.5.3 spark2.1.0 问题: 在window10下编译spark2.1.0源码,在idea下运行example,遇到问题 ...

  3. OpenFlow_tutorial_3_Learn_Development_Tools

    一.Several Utilities OpenFlow Tutorial VM 中预装了一些OpenFlow特性的工具和一般通用网络的工具. 1.Openflow Controller:处于Open ...

  4. jquery 微信端 点击物理返回按钮,弹出提示框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. cp - 复制文件和目录

    总览 cp [选项] 文件路径 cp [选项] 文件...目录 POSIX 选项: [-fipRr] GNU 参数(最短形式): [-abdfilprsuvxPR] [-S SUFFIX] [-V { ...

  6. du查看文件大小

    du+文件名就可以查看文件大小 du+ -h + 文件名也是查看文件大小,只是-h会将文件大小转换成M,G等格式

  7. MFC中调用Windows API函数的方式

    windows aoi 函数的调用前面加::

  8. iis如何在dos中注册

    iis如何在dos中注册   2009-09-23 08:13 提问者采纳   cd \cd c:\windows\microsoft.net\framework\v2.0.50727aspnet_r ...

  9. Python学习-列表的修改,删除操作

    列表的修改操作 列表中的许多操作和字符串中有许多的相同点,因为列表是一个有顺序可变的元素集合,所以在列表中可以进行增加,删除,修改,查找的操作. 列表的修改操作: 如果你想单个修改列表中的某一个元素, ...

  10. [Python3网络爬虫开发实战] 1.3.2-Beautiful Soup的安装

    Beautiful Soup是Python的一个HTML或XML的解析库,我们可以用它来方便地从网页中提取数据.它拥有强大的API和多样的解析方式,本节就来了解下它的安装方式. 1. 相关链接 官方文 ...