陣列,集合,IEnumerable介面,迭代器

2021-04-25 20:15:05 字數 2943 閱讀 5856

發展:陣列-->集合-->泛型

(1)陣列

1. 陣列資料結構是system.array類的乙個例項.

2. system.array類的語法為

[serializableattribute]

[comvisibleattribute(true)]

public abstract class array : icloneable, ilist, icollection, ienumerable

3. 下面看乙個使用陣列的例子(我稱之為隱式實現)

protected void page_load(object sender, eventargs e)

;foreach (string strname in strarrname)

}或者這樣寫

protected void page_load(object sender, eventargs e)

}顯示結果如下

jim,andy,sun,

4. 下面看另乙個使用陣列的例子(我稱之為顯式實現)

protected void page_load(object sender, eventargs e)

}顯示結果如下

jim,andy,sun,

5. 優點:可以高效的訪問給定下標的元素;system.array類有自己的c#語法,使用它程式設計非常的直觀.

6. 缺點:在例項化時必須指定陣列的大小,以後也不能新增,插入,刪除元素.

(2)集合

1. 針對陣列資料結構的缺點,我們使用集合資料結構.

2. 集合資料結構中的類都位於system.collections命名空間中.

3. 說到集合,我們必須先了解幾個介面.想具體了解以下介面,可參考(3)集合介面

3.1 ienumerable介面和ienumerator介面

3.2 icollection介面

public inte***ce icollection : ienumerable

3.3 ilist介面

public inte***ce ilist : icollection, ienumerable

3.4 idictionary介面

public inte***ce idictionary : icollection, ienumerable

4. 說明一下:

4.1 icollection介面是system.collections命名空間中類的基介面.

4.2 icollection介面擴充套件ienumerable;idictionary和ilist則是擴充套件icollection的更為專用的介面.idictionary實現是鍵/值對的集合,如hashtable類.ilist實現是值的集合,其成員可通過索引訪問,如arraylist類.

4.3 某些集合(如queue類和stack類)限制對其元素的訪問,它們直接實現icollection介面.

4.4 如果idictionary介面和ilist介面都不能滿足所需集合的要求,則從icollection介面派生新集合類以提高靈活性.

(3)ienumerable介面和ienumerator介面

1. 我的理解:只有實現了ienumerable介面的資料結構類才能使用foreach語句,下面給出例子

//person類

public class person

}public string lastname

}public person(string strfirstname, string strlastname)

}//personlist集合,實現ienumerable介面

public class personlist : ienumerable

}public ienumerator getenumerator()

}//實現ienumerator介面

public class peopleenumerator : ienumerator

catch (indexoutofrangeexception)}}

public peopleenumerator(person myarrperson)

public bool movenext()

public void reset()

}//集合的使用

protected void page_load(object sender, eventargs e)

; personlist mypersonlist = new personlist(myarrperson);

foreach (person myperson in mypersonlist)

}6. 說明一下我的理解,定義了乙個集合類,實現ienumerable介面,則必須定義乙個與之相應的實現ienumerator介面的類,這樣是不是很麻煩呢?

(4)迭代器

1. 使用迭代器可避免上述麻煩,修改**,注意橙色部分

public class person

}public string lastname

}public person(string strfirstname, string strlastname)

}public class personlist : ienumerable

}public ienumerator getenumerator()}}

例子實現ienumerable介面的類可以進行簡單迭代,例如foreach語句

using system;

using system.collections.generic;

using system.text;

using system.collections;

namespace ienumerable介面}}

class a : ienumerable

else if (i == y)

else if (i == z)

else}}

}}

陣列,集合,IEnumerable介面,迭代器

陣列 集合 泛型 1 陣列 1.陣列資料結構是system.array類的乙個例項.2.system.array類的語法為 serializableattribute comvisibleattribute true public abstract class array icloneable,il...

IEnumerable和IQueryable之我觀

在弄明白ienumerable和這兩個東西之前,首先我們要清楚 linq 查詢操作中的型別關係 問題。引用msdn的文字 不轉換源資料的查詢 下圖演示不對資料執行轉換的 linq to objects 查詢操作。源包含乙個字串序列,查詢輸出也是乙個字串序列。資料來源的型別引數決定範圍變數的型別。選擇...

IEnumerable和IQueryable之我觀

在弄明白ienumerable和這兩個東西之前,首先我們要清楚 linq 查詢操作中的型別關係 問題。引用msdn的文字 不轉換源資料的查詢 下圖演示不對資料執行轉換的 linq to objects 查詢操作。源包含乙個字串序列,查詢輸出也是乙個字串序列。資料來源的型別引數決定範圍變數的型別。選擇...