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

2021-09-06 03:37:49 字數 3481 閱讀 7514

陣列-->集合-->泛型

(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

instrarrname)}

或者這樣寫

顯示結果

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

inmypersonlist)}

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...

IEnumerable和IQueryable之我觀

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

IEnumerable和IQueryable之我觀

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