遍歷ArrayList數組時可能存在的問題

咱們都知道ArrayList類中有個重要的方法是Add(),該方法用於向集合中添加元素,它有一個object類型的參數,表示經過該方法能夠向集合中添加任意類型的項,因爲ArrayList動態數組中的元素能夠多樣化,當使用foreach語句遍歷ArrayList數組時,可能會給程序帶來潛在的問題。數組

咱們來討論下,代碼以下:spa

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

嗯,出問題了,以下:code

說指定的轉化無效,選中它,快速監視,咱們發現:blog

item的值是3,也就是第四個元素時 類型是int,而item的值是3對應的元素類型是float,要轉換爲int,那麼必然會轉化失敗。get

思考良久,發現能夠在遍歷ArrayList以前過濾一下,所以有了一下的解決辦法。以下string

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

調試後,發現這樣能夠避免這樣的問題發生。效果以下:it

相關文章
相關標籤/搜索