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

調試后,發現這樣可以避免這樣的問題發生。效果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM