C#中IList<T>與List<T>的區別
今天寫代碼是遇到這樣一段:
1 IList IList11 =new List (); 2 List List11 =new List ();
百度了很多,稀裏糊塗的就先記下來,做個總結。
首先IList 泛型接口是 ICollection 泛型接口的子代,並且是所有泛型列表的基接口。
它僅僅是所有泛型類型的接口,並沒有太多方法可以方便實用,如果僅僅是作為集合數據的承載體,確實,IList可以勝任。
不過,更多的時候,我們要對集合數據進行處理,從中篩選數據或者排序。這個時候IList就愛莫能助了。
1、當你只想使用接口的方法時,ILis<>這種方式比較好.他不獲取實現這個接口的類的其他方法和字段,有效的節省空間.
2、IList <>是個接口,定義了一些操作方法 這些方法要你自己去實現
List <>是個類型 已經實現了IList <>定義的那些方法
List <Class1> List11 =new List <Class1>();
是想創建一個List <Class1>,而且需要使用到List <T>的功能,進行相關操作。
而 IList <Class1> IList11 =new List <Class1>();
只是想創建一個基於接口IList <Class1>的對象的實例,只是這個接口是由List <T>實現的。所以它只是希望使用到IList <T>接口規定的功能而已。
接口實現松耦合...有利於系統的維護與重構...優化系統流程...
另外在提供一個datatable轉list<>的代碼:
1 public IList<T> GetList<T>(DataTable table) 2 { 3 IList<T> list = new List<T>(); //裏氏替換原則 4 T t = default(T); 5 PropertyInfo[] propertypes = null; 6 string tempName = string.Empty; 7View Codeforeach (DataRow row in table.Rows) 8 { 9 t = Activator.CreateInstance<T>(); ////創建指定類型的實例 10 propertypes = t.GetType().GetProperties(); //得到類的屬性 11 foreach (PropertyInfo pro in propertypes) 12 { 13 tempName = pro.Name; 14 if (table.Columns.Contains(tempName.ToUpper())) 15 { 16 object value = row[tempName]; 17 if (value is System.DBNull) 18 { 19 value = ""; 20 } 21 pro.SetValue(t, value, null); 22 } 23 } 24 list.Add(t); 25 } 26 return list; 27 }
其中 T t = default(T); //就是返回T的默認值。比如說T的類型是int類型的,那麽這個default(T)的值就是0的;如果是string類型的話,這個返回值就是“”空字符串的。
參考博客:https://blog.csdn.net/bytxl/article/details/44033823
https://blog.csdn.net/sibaison/article/details/68059297
C#中IList<T>與List<T>的區別