C 迭代器(Foreach)實現方法

2021-04-30 10:38:20 字數 3605 閱讀 9041

一、為非泛型列表建立迭代器塊

using

system;

using

system.collections.generic;

using

system.text;

namespace

foreachconstruct

#region ienumerable 成員

public tokenenumerator getenumerator()

#endregion

public class tokenenumerator

#region ienumerator 成員

public string current

} public bool movenext()

else

} public void reset()

#endregion }

} */

#endregion

#region

實現介面 /*

* 您可以同時擁有兩者的優點,即

c# 中的型別安全以及與其他公共語言執行庫相容語言的互操作性, *

方法是從

ienumerable

和ienumerator

繼承並使用顯式介面實現。 */

public

class

tokens : system.collections.ienumerable

#region

ienumerable 成員

public

system.collections.ienumerator

getenumerator()

#endregion

public

class

tokenenumerator : system.collections.ienumerator

#region

ienumerator 成員

public

object

current }

public

bool

movenext()

else }

public

void

reset()

#endregion }

}#endregion

class

program);

foreach (string

item

inf)

} }

/** 輸出

this is

asample

sentence.

yang

lei請按任意鍵繼續

. . . */

}二、為泛型列表建立迭代器塊

using

system;

using

system.collections.generic;

using

system.text;

using

system.collections;

namespace

foreachconstruct

public

tpop()

public

ienumerable

toptobottom }

public

ienumerable

bottomtotop }

} public

ienumerable

topn(intn)

} #region

ienumerable成員

public

ienumerator

getenumerator()

} #endregion

#region

ienumerable 成員

ienumerator

ienumerable.getenumerator()

#endregion }

class

test

foreach (intnin

s) ", n); }

system.console.writeline();

foreach (intnin

s.toptobottom)

", n); }

system.console.writeline();

foreach (intnin

s.bottomtotop)

", n); }

system.console.writeline();

foreach (intnin

s.topn(7))

", n); }

system.console.writeline(); }

} /** 輸出

9 8 7 6 5 4 3 2 1 0

9 8 7 6 5 4 3 2 1 0

0 1 2 3 4 5 6 7 8 9

9 8 7 6 5 4 3

請按任意鍵繼續

. . . */

/* yield

的說明

* 在迭代器塊中用於向列舉數物件提供值或發出迭代結束訊號。它的形式為下列之一:

yield return expression;

yield break; *

引數expression

進行計算並以列舉數物件值的形式返回。

expression

必須可以隱式轉換為迭代器的

yield

型別。 *

備註 yield

語句只能出現在

iterator

塊中,該塊可用作方法、運算子或訪問器的體。

這類方法、運算子或訪問器的體受以下約束的控制:

不允許不安全塊。

方法、運算子或訪問器的引數不能是

ref

或out。

yield

語句不能出現在匿名方法中。 當和

expression

一起使用時,

yield return

語句不能出現在

catch

塊中或含有乙個或多個

catch

子句的try

塊中。 *

包含yield

語句的方法或屬性稱為迭代塊。迭代塊必須宣告為返回

ienumerator

或ienumerable介面.

yield

語句從本質上講是運用了延遲計算

(lazy evaluation

或delayed evaluation)

的思想。 在

wiki

上可以找到延遲計算的解釋:將計算延遲,直到需要這個計算的結果的時候才計算,

這樣就可以因為避免一些不必要的計算而改進效能,在合成一些表示式時候還可以避免一些不必要的條件,

因為這個時候其他計算都已經完成了,所有的條件都已經明確了,有的根本不可達的條件可以不用管了。 */

}

C 迭代器的實現

using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace iterator using system using s...

迭代器底層實現 C

迭代器 iterator 是一種物件,用來遍歷容器中部分或全部的元素.拿foreach的內部實現來舉例。foreach可以用來遍歷可列舉型別集合的元素,比如 陣列,list,dictionary等 其實就是用while語句來獲取遍歷集合的 ienumerator介面 來不斷的movenext 後面會...

用函式方法實現迭代器

序列就是可迭代的,是乙個迭代器,也就是實現了ienumerable介面的。列表就是記憶體中的元素的集合。容易讀寫,通常以索引的方式訪問。用函式方法實現迭代器 private static ienumerablesequence funcgetnext,t startvalue,funcbool en...