zoukankan      html  css  js  c++  java
  • 遍历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(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;
            }
        }

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

     

  • 相关阅读:
    Hbase基础(十二):Kylin可视化
    Hbase基础(十一):Kylin快速入门
    Hbase基础(十):Kylin环境搭建
    Hbase基础(九):Kylin 概述
    Hbase基础(八):Sqoop 一些常用命令及参数
    Hbase基础(七):Sqoop 的简单使用案例
    Hbase基础(六):Sqoop 简介与原理、安装
    HBASE进阶(5):整合Phoenix
    frrouting mpls sr
    tcpdump mpls 多个mpls label
  • 原文地址:https://www.cnblogs.com/jason-davis/p/4014539.html
Copyright © 2011-2022 走看看