索引器與迭代器的使用

2021-04-15 11:59:05 字數 1878 閱讀 2134

選代器的本地檔案 e:/diablo/inumerator/classlibrary2/classlibrary2/program.cs

c#索引器使用方法介紹

訪問類中的集合,希望好像類本身就是乙個陣列一樣引器是一種c#的語法構造,可以用我們熟悉的陣列方括號語法訪問類中的集合

語法:型別 this[型別 引數]

public class listboxtest

...}

public void add(string thestring)

...else

strings[ctr++] = thestring;

}允許陣列式訪問#region 允許陣列式訪問

public string this[int index]

...return strings[index];

}set

...else

strings[index] = value;}}

#endregion

索引string#region 索引string

private int findstring(string searchstring)

...}

static void main(string args)

...console.writeline(listbox["who"]);

}結果為:

hello

universe

whoare

youwho

沒有迭代器的時候,建立乙個可用於foreach的集合(c# 1.0):

public class mycollection : ienumerable

public class myenumerator : ienumerator

public bool movenext()

public int current }

object ienumerator.current }}}

對集合使用foreach語句:

foreach(int i in col)

相單于:

ienumerator etor = ((ienumerable)col).getenumerator();

try}

finally

c# 2.0 中的迭代器

使用迭代器建立於foreach的集合(c# 2.0):

public class stack:ienumerable

public t pop()

public ienumeratorgetenumerator()}}

使用foreach語句:

stackstack = new stack();

foreach(int i in statck)

使用迭代器建立倒序遍歷:

public ienumerablebottomtotop

使用yield break中斷迭代:

for(int i=count-1;i>=0;--i)

迭代器的機制

c# 2.0中的迭代器同樣是通過編譯器的一層額外處理,來簡化建立可用於foreach的列舉集合的工作。

通過ilda**.exe反彙編工作,我們能夠獲得對迭代器的深入理解:

- 迭代器中的getenumerator()方法

- 迭代器中的巢狀類

- 迭代器中的yield語句

總結匿名方法允許我們以一種「內聯」的方式將**直接和委託例項相關聯,從而使得委託例項化的工作更加直觀和方便。迭代器允許我們更加方便地編寫應用於foreach語句的列舉集合。

對於類似於c#這樣的高階語言,掌控好他乙個很重要的地方就是掌控編譯器在背後為我們做了哪些工作。c# 2.0中的匿名方法和迭代器都是用國在編譯層面進行一些額外的處理,進而來簡化程式設計師的工作。

索引器與迭代器,屬性的區別

索引器允許類或結構的例項按照與陣列相同的方式進行索引 迭代器主要是為foreach關鍵字服務的 打個比方吧 可能不恰當 加入在桌面上擺上十張紙牌並按照一定的順序編上1 10的號碼,對應的為 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 如果是索引我索引第二張返回的就...

索引器與迭代器,屬性的區別

索引器允許類或結構的例項按照與陣列相同的方式進行索引 迭代器主要是為foreach關鍵字服務的 打個比方吧 可能不恰當 加入在桌面上擺上十張紙牌並按照一定的順序編上1 10的號碼,對應的為 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j 如果是索引我索引第二張返回的就...

索引器,列舉器,迭代器,比較器

索引器實現for迴圈 console.readkey public class people 索引器 public string this int index set 列舉器實現foreach foreach string p in people console.readkey public cla...