C# 迭代器
带泛型约束的使用方式
using System; using System.Collections; class App{ public static void Main() { foreach (int number in SomeNumbers()) { Console.WriteLine(number.ToString() + " "); } //Console.WriteLine(SomeNumbers().MoveNext()); // Output: 3 5 8 // Console.ReadKey(); } public static IEnumerable<int> SomeNumbers() { yield return 3; yield return 5; yield return 8; } }
using System; using System.Collections; class App{ static void Main() { // foreach (int number in SomeNumbers()) // { // Console.WriteLine(number.ToString() + " "); // } // Console.WriteLine(SomeNumbers().GetEnumerator()); IEnumerator enumerator= SomeNumbers().GetEnumerator(); enumerator.MoveNext(); Console.WriteLine(enumerator.Current); // Output: 3 5 8 // Console.ReadKey(); } public static IEnumerable<int> SomeNumbers() { yield return 3; yield return 5; yield return 8; } }
不带泛型约束的使用方式:
using System; using System.Collections; using System.Collections.Generic; namespace App{ class MyClass{ public static void Main(string[] args){ string[] arr={"mlh","1","4","21"}; IEnumerator str = G().GetEnumerator(); while(str.MoveNext()){ Console.WriteLine(str.Current); } } public static IEnumerable G(){ yield return 1; yield return 2; } } }
GetEnumerator方法
using System; using System.Collections; namespace App{ class MyClass{ public static void Main(string[] args){ int[] arr = {1,2,3}; IEnumerator enumerator = arr.GetEnumerator(); enumerator.MoveNext();//1 Console.WriteLine(enumerator.Current); enumerator.MoveNext(); Console.WriteLine(enumerator.Current); //2 } } }
IEnumerator 接口
#define debug using System; using System.Collections; namespace ConsoleApp1 { class Program { static void Main(string[] args) { IEnumerator bb = GetEnumerator (); while(bb.MoveNext()){ Console.WriteLine(bb.Current); } Console.ReadKey(); } public static IEnumerator GetEnumerator () { yield return 1; yield return 1; yield return 1; } } }