IList與List的區別

2021-06-18 01:11:16 字數 2000 閱讀 7748

已經有很多人討論過ilist和list的區別,恩,我也贊同其中的一些觀點,其實他們二者也是有優有劣的,看你著重用在哪個方面,先貼一下我贊同的意見,基本上也都是網友們總結的。

首先ilist 泛型介面是 icollection 泛型介面的子代,並且是所有泛型列表的基介面。它僅僅是所有泛型型別的介面,並沒有太多方法可以方便實用,如果僅僅是作為集合資料的承載體,確實,ilist可以勝任。

其次, ilist <> 是在 .net framework 2.0裡面才支援的

1. 不過,更多的時候,我們要對集合資料進行處理,從中篩選資料或者排序。這個時候ilist就不太好使了。因為他的效率要慢。後面會一一講到。

2、ilist <>是個介面,定義了一些操作方法這些方法要你自己去實現,list <>是泛型類,它已經實現了ilist <>定義的那些方法

ilist ilist11 =new list ();

list list11 =new list ();

這兩行**,從操作上來看,實際上都是建立了乙個list物件的例項,也就是說,他們的操作沒有區別。只是用於儲存這個操作的返回值變數型別不一樣而已。

那麼,我們可以這麼理解,這兩行**的目的不一樣。

list list11 =new list ();

是想建立乙個list,而且需要使用到list的功能,進行相關操作。

而ilist ilist11 =new list ();

只是想建立乙個基於介面ilist的物件的例項,只是這個介面是由list實現的。所以它只是希望使用到ilist介面規定的功能而已。

3.介面實現松耦合...有利於系統的維護與重構...優化系統流程...鼓勵使用介面,這樣可以實現功能和具體實現的分離.

這些說的都是有道理的,那麼接剛才第一點的話題說,為什麼說用到資料處理,或者排序ilist就不太好使了呢。這個也是要根據資料量來的。我做了如下測試

public class testclass

publicstring name

}static void main(string args)

private static void listtest()

int count =0;

foreach (vartc in list1)

} => i.id);

timer.stop();

console.write("count:" + count + ", list time:");

console.writeline(timer.elapsed.ticks);

timer = newstopwatch();

timer.start();

ilistlist2 = new list();

for (int i =0; i < 10000000; i++)

int count2 =0;

foreach (vartc in list2)

} => i.id);

timer.stop();

console.write("count:" + count2 + ", ilist time:");

console.writeline(timer.elapsed.ticks);

console.read();

}

當我們都去遍歷ilist和list的時候,注意我取的資料是1~1000之間,經過反覆測試,ilist的效率確實是要低一些。那就更不用說資料量更大的時候,請看輸出框:

但是,當我取的資料是1~500的時候, ilist似乎效率還是要慢一些。

另外,可能有的朋友會說,你把前面的for迴圈放在外面比較呢,這個我也做過測試,結果還是一樣,list效率要好於ilist

同樣的方法,我測試了,ilist和list的orderby的效率,list均有勝面,高效一籌。所以,什麼時候用ilist和list自己去斟酌,當你用到設計的時候當然是ilist合理一些。用做資料容器遍歷或者排序,還是選擇list好一點。

歡迎批評

原文**:

Ilist 與list的區別

首先ilist 泛型介面是 icollection 泛型介面的子代,並且是所有泛型列表的基介面。它僅僅是所有泛型型別的介面,並沒有太多方法可以方便實用,如果僅僅是作為集合資料的承載體,確實,ilist可以勝任。不過,更多的時候,我們要對集合資料進行處理,從中篩選資料或者排序。這個時候ilist就愛莫...

List與IList的區別

在我看乙個源程式的時候看到這個例子使用了ilist返回型別,因為上午剛剛總結過list的詳細用法,突然出現了ilist,感覺很奇怪,於是上網蒐集了很多東西才明白了 它們的區別,剛開始僅僅是看文字說明,但是怎麼都不明白,後來看到了乙個例項,然後接著 看文字說明,豁然開朗啊,現在我先把這個例項程式寫出來...

C 中IList與List區別

首先ilist 泛型介面是 icollection 泛型介面的子代,並且是所有泛型列表的基介面。它僅僅是所有泛型型別的介面,並沒有太多方法可以方便實 用,如果僅僅是作為集合資料的承載體,確實,ilist可以勝任。不過,更多的時候,我們要對集合資料進行處理,從中篩選數 據或者排序。這個時候ilist就...