我們知道要使用foreach語句從客戶端代碼中調用迭代器,必需實現IEnumerable接口來公開枚舉器,IEnumerable是用來公開枚舉器的,它並不實現枚舉器,要實現枚舉器必需實現IEnumerator接口。現在用 yield關鍵字,您不必實現整個 IEnumerator 接口。從而簡化了代碼. 而且可以實現更加靈活的枚舉。
如下代碼:
1// Declare the collection:
2public class SampleCollection
3{
4 public int[] items;
5
6 public SampleCollection()
7 {
8 items = new int[5] { 5, 4, 7, 9, 3 };
9 }
10
11 public System.Collections.IEnumerable BuildCollection()
12 {
13 for (int i = 0; i < items.Length; i++)
14 {
15 yield return items[i];
16 }
17 }
18}
19
20class MainClass
21{
22 static void Main()
23 {
24 SampleCollection col = new SampleCollection();
25
26 // Display the collection items:
27 System.Console.WriteLine("Values in the collection are:");
28 foreach (int i in col.BuildCollection())
29 {
30 System.Console.Write(i + " ");
31 }
32 }
33}
34
或者
Code
1class Program
2 {
3 static void Main(string[] args)
4 {
5 SampleCollection s = new SampleCollection();
6
7 foreach(int i in s)
8 {
9 Console.WriteLine(i.ToString());
10 }
11 }
12 }
13
14 public class SampleCollection:IEnumerable
15 {
16 public int[] items;
17
18 public SampleCollection()
19 {
20 items = new int[5] { 5, 4, 7, 9, 3 };
21 }
22
23 public IEnumerator GetEnumerator()
24 {
25 for (int i = 0; i < items.Length; i++)
26 {
27 yield return items[i];
28 }
29 }
30 }
我們在注意的是C#2.0增加了yield關鍵字,簡化了對枚舉器的實現。但他只不過是在編譯器上的改變,實際上是由編譯器幫我們實現了IEnumerator接口的枚舉器.