我們都知道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; } }
調試后,發現這樣可以避免這樣的問題發生。效果如下: