迭代器多種實現形式

2022-04-04 07:17:27 字數 2512 閱讀 5616

1.首先我們看下ienumerable介面定義:

namespace system.collections  

這個介面是重中之重,迭代器就是實現這個介面才能使之迭代的。

2.c#的yield關鍵字您也必須知道

yield在迭代器塊中用於向列舉數物件提供值或發出迭代結束訊號。它有兩種表現形式:

yield return ;

yield break;

請注意:

expression 必須可以隱式轉換為迭代器的 yield 型別

yield語句只能主線在迭代模組中,而不能出現在不安全模組,也不能出現在匿名方法中;當和 expression 一起使用時,yield return 語句不能出現在 catch 塊中或含有乙個或多個 catch 子句的 try 塊中。

3.介紹迭代器概念

其實所謂迭代就是指迴圈,迭代器是指實現該迴圈的一種方式。

迭代器是c#2.0增加的功能,它可以是方法、get訪問器或運算子,最終它可以使您能夠在類或結構中支援foreach迭代。在實現上您不必實現整個ienumerable介面,您只需提供乙個迭代器即可,當編譯器監測到迭代器時間,她會自動生成ienumerable 或 ienumerable介面的 current、movenext 和 dispose 方法。

迭代器是可以返回相同型別的值的有序序列的一段**,它使用yield return語句一次返回每個元素,使用yield break終止迭代,它的返回型別必須是ienumerable、 ienumerator、ienumerable或 ienumerator。

3.建立迭代器最常用的方法是實現ienumerable介面中的getenumerator方法,ienumerable介面如下:

using system;  

using system.collections;  

using system.collections.generic;  

using system.linq;  

using system.text;  

namespace ctochina.net  

}  

}  

public class myiterator  

}  

}  

}  輸出:

1       2       3       4       5       6       7

注意system.collections;命名空間的引用,因為ienumerator在其中

由於是實現ienumerable介面中的getenumerator方法,所以乙個類中只能有乙個getenumerator迭代。

4.另一種實現迭代的方法,**接著上例如:

using system;  

using system.collections;  

using system.collections.generic;  

using system.linq;  

using system.text;  

namespace ctochina.net  

console.writeline();  

//迭代二  

foreach (int i in myiterator.myenumerator_instance(2,8))  

console.writeline();  

//迭代三  

foreach (int i in myiterator.myenumerator_static(2,8))  

}  

}  

public class myiterator  

}  

//ienumerable 的例項實現迭代  

public ienumerable myenumerator_instance(int iloop, int jloop)  

}  

//ienumerable 的靜態實現迭代  

public static ienumerable myenumerator_static(int iloop,int jloop)  

}  

}  

}  輸出:

1       2       3       4       5       6       7

2       3       4       5       6       7       8

2       3       4       5       6       7       8

可見這種方式靈活,乙個類中可以有多個迭代的實現

ruby迴圈的實現形式

ruby迴圈的實現形式 關鍵字 ruby ruby語言的用法非常的靈活。我們來舉個簡單的例子 如我們有個陣列 array w a b c d e f 現在我們要遍歷該陣列,並列印出每個元素 ruby 1.2.方法一 3.length array.list 4.length.times do t 5....

字尾樹的實現形式

高階資料結構 上述字尾樹t是根據字串s的所有字尾構建的。有時候這個s可以是要給字串集合,所以字尾樹t是根據所欲字串的字尾構建的。這種字尾樹也叫做廣義字尾樹。一種很自然的構建方式可以給每個字串加兩兩不同的結尾符,這些結尾符沒有在任何字串 現過。然後,我們將這些新增了結尾符的字串首尾相接作為乙個整體來構...

資料去重的幾種實現形式

對資料庫進行操作,得到的結果有重複值,這是個不可避免的問題。從源頭上分析,分兩種情況 一是使用者執行了sql語句,此時得到的結果就已經包含重複值 另一種就是返回的物件是執行多條sql語句後得到了,每條sql語句返回的物件沒有重複值,但彼此之間存在重複現象,此時進行彙總操作就會出現重複值的情況。例如如...