您好,登錄后才能下訂單哦!
這篇文章主要介紹C#如何實現迭代器方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
可以使用foreach
循環語句進行的迭代的方法,稱為可迭代方法,或者迭代器方法。
迭代器用法法介紹。
迭代器用于依次返回每個元素,一般用于foreach循環語句。迭代器方法需要使用yield return語句。
yield return 語句介紹:
保持代碼的當前位置,在下一次調用迭代器方法時執行。
迭代方法在使用過程中左右步驟對應。yield return語句主要是返回一個結果作為函數調用的結果。并記錄當前運行位置,當下次函數被調用時,在當前位置執行這個函數。在迭代塊中除了yield return
外,不允許出現普通的return語句。
迭代方法使用的命名空間為using System.Collections.Generic
;
下面代碼為迭代器使用的具體代碼:
class Program { public static IEnumerable<int> Fibs() { int f1 = 1, f2 = 2; while (true) { yield return f1; yield return f2; f1 += f2; f2 += f1; } } static void Main(string[] args) { foreach (int i in Fibs()) if (i < 20) Console.WriteLine("{0}", i); else break; Console.ReadKey(); } }
IEnumerable
是泛型定義的里面的int關系到你迭代對象yield return返回值的類型。如果你定義IEnumerable<int>那么你返回的值是int類型,如果你定義IEnumerable
那么你的返回值是string類型以此類推。如果你想以某個條件結束方法。可以使用外面的條件如上圖所示。也可以使用yield break。
class Program { public static IEnumerable Fibs() { string f1 = "1", f2 = "2"; while (true) { yield return f1; yield return f2; f1 += f2; f2 += f1; if (f1.Length > 8) yield break; } } static void Main(string[] args) { foreach (string i in Fibs()) Console.WriteLine("{0}", i); Console.ReadKey(); } }
首先是通過使用接口IEnumerable
的方式,然后編寫IEnumerator GetEnumerator()的方式。在代碼中控制索引位置,和循環次數。如果索引位置出錯則使用代碼throw new NotImplementedException()
報錯。
using System; using System.Collections; using System.Collections.Generic; namespace test02 { class Program { static void Main(string[] args) { object [] e = new object[5] { 1, 2, 3, 4, 5 }; Itear01 s = new Itear01(e,2); foreach (object i in s) Console.WriteLine("{0}", i); Console.ReadKey(); } } public class Itear01 : IEnumerable { object[] values; int StartPoint=-1; int current=0; public Itear01(object[] values,int StartPoint) { this.values = values; this.StartPoint = StartPoint; } public IEnumerator GetEnumerator() { if(this.StartPoint==-1) throw new NotImplementedException(); while(true) { yield return this.values[StartPoint]; StartPoint = (StartPoint + 1) % values.Length; current++; if (current == values.Length) { break; } } } } }
以上是“C#如何實現迭代器方法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。