一、為非泛型列表建立迭代器塊
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...