1、性能 對值類型使用非泛型集合類,在把值類型轉換為引用類型,和把引用類型轉換為值類型時,需要進行裝箱和拆箱操作。裝箱和拆箱的操作很容易實現,但是性能損失較大。假如使用泛型,就可以避免裝箱和拆箱操作。 1 ArrayList list=new ArrayList(); 2 list.Add(20); ...
1、性能
對值類型使用非泛型集合類,在把值類型轉換為引用類型,和把引用類型轉換為值類型時,需要進行裝箱和拆箱操作。裝箱和拆箱的操作很容易實現,但是性能損失較大。假如使用泛型,就可以避免裝箱和拆箱操作。
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]; //同樣地,訪問時也不需要拆箱
2、類型安全
與ArrayList類一樣,如果使用對象,可以在這個集合中添加任意類型。
如果使用非泛型編程,如下代碼,就有可能在某些情況下會發生異常。
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 }
如果該用泛型編程,則可以避免這種異常,讓編譯器檢查出錯誤。
1 List<int> list=new List<int>(); 2 list.Add(20); 3 lsit.Add(”string”); //編譯時報錯,只能報整數類型添加到集合中 4 list.Add(new MyClass()); //同上
原文連接:https://www.cnblogs.com/blueGao/p/10220753.html