码迷,mamicode.com
首页 > 其他好文 > 详细

遍历ArrayList数组时可能存在的问题

时间:2014-10-09 22:54:31      阅读:217      评论:0      收藏:0      [点我收藏+]

标签: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;
        }
    }

嗯,出问题了,如下:

bubuko.com,布布扣

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

bubuko.com,布布扣

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;
        }
    }

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

bubuko.com,布布扣

 

遍历ArrayList数组时可能存在的问题

标签:style   blog   http   color   os   使用   ar   for   sp   

原文地址:http://www.cnblogs.com/jason-davis/p/4014539.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!