3 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
IEnumerable僅提供最少的“可迭代”功能。您可以遍歷該序列,僅此而已。這有缺點(diǎn)-例如,使用IEnumerable計(jì)數(shù)元素或獲取第n個(gè)元素效率很低-但它也有優(yōu)點(diǎn)-例如,IEnumerable可以是無窮的序列,例如質(zhì)數(shù)序列。
數(shù)組是一個(gè)固定大小的集合,具有隨機(jī)訪問權(quán)限(即,您可以對其進(jìn)行索引)。
List是一個(gè)具有隨機(jī)訪問權(quán)限的可變大小的集合(即,您可以添加和刪除元素)。
IList是一個(gè)接口,用于從各種具體類(例如List,BindingList,ObservableCollection等)中抽象出列表功能(計(jì)數(shù),添加,刪除,索引器訪問)。

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
IEnumerable是一個(gè)接口,它允許通過一組項(xiàng)進(jìn)行迭代(例如,通過foreach關(guān)鍵字)。
數(shù)組是.NET固有的。它容納相同類型的項(xiàng)目,但是大小固定。創(chuàng)建具有x個(gè)元素的數(shù)組后,它就無法增長或收縮。
IList定義列表的接口,并實(shí)現(xiàn)IEnumerable。
List實(shí)現(xiàn)IList接口;這是列表的具體類型。
.NET列表和數(shù)組之間的區(qū)別在于列表可以添加元素-它們增長到足以容納所有必需項(xiàng)的大小。列表將其內(nèi)部存儲(chǔ)在一個(gè)數(shù)組中,當(dāng)該數(shù)組的大小不再足以容納所有元素時(shí),將創(chuàng)建一個(gè)新的數(shù)組并復(fù)制項(xiàng)目。
IList和數(shù)組都實(shí)現(xiàn)IEnumerable。接口就是這樣工作的-類實(shí)現(xiàn)協(xié)定并以相似的方式運(yùn)行,因此可以類似地被對待(您知道該類實(shí)現(xiàn)IEnumerable,您無需知道操作方式或原因)。我建議您閱讀接口等內(nèi)容。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
IEnumerable集合的生成很懶。例:
public IEnumerable<int> GetTwoInts()
{
yield return 1;
yield return 2;
}
public void Something()
{
var twoInts = GetTwoInts();
}
在方法Something中,對GetTwoInts()的調(diào)用實(shí)際上不會(huì)導(dǎo)致方法GetTwoInts被執(zhí)行,因?yàn)槊杜e從未被迭代過。
- 3 回答
- 0 關(guān)注
- 1168 瀏覽
添加回答
舉報(bào)