遍历ArrayList数组时可能存在的问题
我们都知道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数组时可能存在的问题的更多相关文章
- JavaScript-//FOR/IN循环。当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处。
<script> //FOR/IN循环.当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处. function getvalue(portfolio){ var ...
- 遍历php数组的几种方法
第一.foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. <?php $urls= array('aaa','bbb','ccc','ddd'); foreach ...
- 以forin的方式遍历数组时进行删除操作的注意点
今天在修改某项需求的时候,需要在遍历的时候将匹配项移除掉,采用的时forin的方式遍历,然后运行的时候却crash掉了 for (NSString*str in self.btnArray) { if ...
- php 中遍历数组时使用引用出现的问题
今天在使用foreach遍历数组时发现,当使用&时会出现问题: $arr = array( array('id' => 100, 'error'=> 'aa'), array('i ...
- ArrayList中存储数组时需要注意到的问题
因为数组的地址是不会发生变化的,每次在数组中的内容改变后,将数组添加到ArrayList中时,会导致ArrayList中的每个内容都是最后添加进去的数据.案例如下所示: Object []objs = ...
- jQuery中使用$.each()遍历数组时要注意的地方
使用jQuery中 $.each()遍历数组,要遍历的数组不能为空(arry!="") 例如: $.each(arry, function (i, item) ...
- 遍历 ArrayList与Map集合
import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * 遍历 ArrayList * @ ...
- List Arraylist 数组的区别
数组.List和ArrayList的区别 数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单,比如: ]; //赋值 s[]=]=]="c"; //修 ...
- php数组声明、遍历、数组全局变量使用小结
数组的本质:管理和操作一组变量,成批处理,下面为大家介绍下数组的分类.数组的分类及使用说明,感兴趣的朋友可以了解下哈 php教程:数组声明,遍历,数组全局变量 <? /* * 一.数组的概 ...
随机推荐
- vscode前端开发软件配搭好用的插件
使用方法,可以在官网中搜索需要的插件或者在VsCode的“”扩展“”中搜索需要的插件添加方法使用Ctrl+P, 输入 ext install xxxx ,搜索要安装的插件,点击安装按钮即可(各取所需插 ...
- C# 处理年月日提取时间
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- AttributeError: 'tuple' object has no attribute 'extend'
出错demo In [5]: a.extend([4,5]) --------------------------------------------------------------------- ...
- CE工具里自带的学习工具--第三关
图解: 重复第5,6,7,8,9步,最终得到:
- 修改python注册表
转自:http://blog.csdn.net/u014680513/article/details/51005650 # script to register Python 2.0 or later ...
- IOS 3D UI --- CALayer的transform扩展
http://www.cocoachina.com/bbs/read.php?tid=117061 例子代码可以在 http://download.csdn.net/detail/worldmatri ...
- [C#] 对List进行分组排序后输出
Student 类: public class Student { public int ID { get; set; } public string Name { get; set; } publi ...
- vue slot的使用介绍
插槽:slot (不知道我这样理解是不是对的,欢迎大佬指点) 具体是什么样子的,请看例子说明 父组件代码 子组件代码 结果 可以看到 ,结果是父组件里面内容显示了,子组件内容显示了,但是在父组件中插入 ...
- element--ui使用tab切换时如何获取当前对象的id或者其他属性
1. 问题 当使用tab切换时,部分特殊场景需要获取当前元素的类名或者id. 2.解决思路,tab切换是绑定函数,函数会传递过去当前对象,通过当前对象获取对象属性 vue部分代码:本项目是在vue-c ...
- AC手动机 [原创]
题目背景 Monster_Qi 又双叒叕拿到了rank1! 在开心之余他决定帮助蒟蒻floatiy拿到合适的排名. 题目描述 已知考试有n道题,每道题有num个测试点,有m个人 b[x,i,j](01 ...