一、性能編程
對值類型使用非泛型集合類,在把值類型轉換爲引用類型,和把引用類型轉換爲值類型時,須要進行裝箱和拆箱操做。裝箱和拆箱的操做很容易實現,可是性能損失較大。假如使用泛型,就能夠避免裝箱和拆箱操做。安全
1 ArrayList list=new ArrayList(); 2 list.Add(20); //裝箱,list存放的是object類型元素,須將值類型轉化爲引用類型 3 int i=(int)list[0]; //拆箱,list[0]的類型是object,要賦值就得把引用類型轉化爲值類型
若是換成泛型編程,就不會有裝箱和拆箱的性能損失。性能
1 List<T> list=new List<int>(); 2 list.Add(20); //由於指定了用int來實例化,所以沒必要裝箱 3 int i=list[0]; //一樣地,訪問時也不須要拆箱
二、類型安全spa
與ArrayList類同樣,若是使用對象,能夠在這個集合中添加任意類型。code
若是使用非泛型編程,以下代碼,就有可能在某些狀況下會發生異常。對象
1 ArrayList list=new ArrayList(); 2 list.Add(20); 3 list.Add("string"); 4 list.Add(new MyClass()); 5 6 foreach(int i in list) 7 { 8 Console.WriteLine(i); //這裏會有個異常,由於並非集合中的全部元素均可以轉化爲int 9 }
若是該用泛型編程,則能夠避免這種異常,讓編譯器檢查出錯誤。blog
1 List<int> list=new List<int>(); 2 list.Add(20); 3 lsit.Add(」string」); //編譯時報錯,只能報整數類型添加到集合中 4 list.Add(new MyClass()); //同上