• 遍历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;
            }
        }

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

     

  • 相关阅读:
    putty远程登录,no supported authentication methods available解决方法(腾讯云)
    spring boot 集成 springbootstarterquartz 集群版配置
    排序算法
    密码发生器
    分解质因数
    python基础面试题
    计算输入密码的时间
    论文解读(GCC)《Efficient Graph Convolution for Joint Node RepresentationLearning and Clustering》 Learner
    期望、方差、协方差 Learner
    论文解读(LGAE)《Simple and Effective Graph Autoencoders with OneHop Linear Models》 Learner
  • 原文地址:https://www.cnblogs.com/jason-davis/p/4014539.html
Copyright © 2020-2023  润新知