咱們都知道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