一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C# - C#使用yield關(guān)鍵字構(gòu)建迭代器詳解

C#使用yield關(guān)鍵字構(gòu)建迭代器詳解

2022-01-24 13:42絳河 C#

這篇文章主要為大家詳細介紹了C#使用yield關(guān)鍵字構(gòu)建迭代器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

以前,如果我們希望構(gòu)建支持foreach枚舉的自定義集合,只能實現(xiàn)IEnumerable接口(可能還有IEnumerator()),返回值還必須是IEnumerator類型,除此之外還可以通過迭代器來使用構(gòu)建foreach循環(huán)的類型,詳細見下鏈接。

 代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
public class Car
 {
   //內(nèi)部狀態(tài)數(shù)據(jù)
   public int CurentSpeed;
   public int MaxSpeed;
   public string name;
   //汽車能不能用
   private bool carIsdead;
   //類構(gòu)造函數(shù)
   public Car() { }
   public Car(string name, int currentspeed, int maxspeed = 100)
   {
     this.name = name;
     this.CurentSpeed = currentspeed;
     this.MaxSpeed = maxspeed;
   }
   //定義委托類型
   public delegate void CarEngineHandler(string msdForCar);
   //定義每個委托類型的成員變量
   private CarEngineHandler listOfhandlers;
   //向調(diào)用者添加注冊函數(shù)
   public void RegisterWithCarEngine(CarEngineHandler methodTocall)
   {
     if (listOfhandlers == null)
       listOfhandlers = methodTocall;
     else
       listOfhandlers += methodTocall;//支持多路廣播
   }
   //實現(xiàn)Accelerate()方法
   public void Accelerate(int delta)
   {
     if (carIsdead)
     {
       if (listOfhandlers != null)
       {
         listOfhandlers("sorry,this car is dead");
       }
     }
     else
     {
       CurentSpeed += delta;
       //不能超過最大速度
       if (5 == (MaxSpeed - CurentSpeed) && listOfhandlers != null)
       {
         listOfhandlers("this speed is nearly to the maxspeed");
       }
       if (CurentSpeed > MaxSpeed)
       {
         carIsdead = true;
       }
       else
         Console.WriteLine("current speed:{0}", CurentSpeed);
     }
   }
 }
 public class Garage : IEnumerable
 {
   private Car[] garage = new Car[3];
   public Garage()
   {
     garage[0] = new Car("a", 10);
     garage[1] = new Car("b", 13);
     garage[2] = new Car("c", 14);
   }
   public Enumerator GetEnumerator()
   {
     //返回數(shù)組對象的IEnumerator
     //return garage.GetEnumerator();
     //用yield關(guān)鍵字構(gòu)建迭代器方法
     foreach (Car c in garage)
     {
       //當(dāng)yield return語句執(zhí)行后,當(dāng)前位會被
       //保存下來,下一次執(zhí)行會從當(dāng)前位開始
       yield return c;
     }
   }
 }
 class Program
 {
   static void Main(string[] args)
   {
     Garage g = new Garage();
     foreach (Car c in g)
     {
       Console.WriteLine("car name:{0}", c.name);
     }
   }
 }

參考:C#中可枚舉類型詳解

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.cnblogs.com/janghe/p/7454867.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99久久精品国产免看国产一区 | 精灵之森高清在线 | free service性v极品 | 暖暖免费高清完整版观看日本 | 疯狂伦交1一6 小说 风间由美在线 | zzjj中国| 99re在线精品视频免费 | 欧美视频一二三区 | 亚洲va精品中文字幕 | 国产欧美日韩综合二区三区 | 国产精品成人亚洲 | 80s在线| 91尤物在线| bnb998八度免费影院丫意浓 | 日韩一卡2卡3卡新区网站 | 国产精品久久久久这里只有精品 | 色综合久久98天天综合 | 青青自拍视频 | 9久热久爱免费精品视频在线观看 | 久久草福利自拍视频在线观看 | 69日本xxxhd| 国产午夜成人无码免费看 | 丰满大乳欲妇三级k8 | 91精品久久国产青草 | 欧美成人v视频免费看 | 国产精品亚洲一区二区久久 | 日韩色图区 | 69av导航| 精品免费久久久久久成人影院 | 亚洲 欧美 成人 | 国产福利一区二区精品视频 | 精品视频免费在线 | 亚洲成人国产精品 | 国产亚洲女人久久久久久 | 日本最新伦中文字幕 | 国色天香社区视频免费观看3 | 国产精品久久久久久久牛牛 | 亚洲国产精品牛在线 | 国产区小视频 | 我与白丝同桌的故事h文 | 果冻传媒在线播放观看228集 |