1. 程式人生 > >C#中IList<T>與List<T>的區別

C#中IList<T>與List<T>的區別

tor int csdn reac nbsp 比較 add 實現 實用

今天寫代碼是遇到這樣一段:

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;
 7
foreach (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 }
View Code

其中 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>的區別