标签:style blog http color os 使用 ar for sp
我们都知道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(1); arr.Add(2); arr.Add(3); 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(1); arr.Add(2); arr.Add(3); //添加浮点型的元素 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(1); arr.Add(2); arr.Add(3); //添加浮点型的元素 arr.Add(2f); //添加日期类型的元素 arr.Add(DateTime.Today); //添加字符型元素 arr.Add("hello"); return arr; } }
调试后,发现这样可以避免这样的问题发生。效果如下:
标签:style blog http color os 使用 ar for sp
原文地址:http://www.cnblogs.com/jason-davis/p/4014539.html