欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年10月11日 09:31:00   作者:絳河  
這篇文章主要為大家詳細(xì)介紹了C#使用yield關(guān)鍵字構(gòu)建迭代器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

 代碼

 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);
    //定義每個(gè)委托類型的成員變量
    private CarEngineHandler listOfhandlers;
    //向調(diào)用者添加注冊(cè)函數(shù)
    public void RegisterWithCarEngine(CarEngineHandler methodTocall)
    {
      if (listOfhandlers == null)
        listOfhandlers = methodTocall;
      else
        listOfhandlers += methodTocall;//支持多路廣播
    }
    //實(shí)現(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()
    {
      //返回?cái)?shù)組對(duì)象的IEnumerator
      //return garage.GetEnumerator();
      //用yield關(guān)鍵字構(gòu)建迭代器方法
      foreach (Car c in garage)
      {
        //當(dāng)yield return語句執(zhí)行后,當(dāng)前位會(huì)被
        //保存下來,下一次執(zhí)行會(huì)從當(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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#中接口(interface)的理解

    C#中接口(interface)的理解

    C#中接口(interface)的理解...
    2007-03-03
  • C#中利用Lotus notes公共郵箱發(fā)送郵件的方法

    C#中利用Lotus notes公共郵箱發(fā)送郵件的方法

    這篇文章主要給大家介紹了關(guān)于C#中利用Lotus notes公共郵箱發(fā)送郵件的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2018-02-02
  • C#打印繪圖的實(shí)現(xiàn)方法

    C#打印繪圖的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#打印繪圖的實(shí)現(xiàn)方法,涉及C#針對(duì)圖片的繪制與打印相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • .net 通過 WebAPI 調(diào)用nsfwjs 進(jìn)行視頻鑒別功能

    .net 通過 WebAPI 調(diào)用nsfwjs 進(jìn)行視頻鑒別功能

    這篇文章主要介紹了.net 通過 WebAPI 調(diào)用 nsfwjs 進(jìn)行視頻鑒別,文末給大家提到了FFMPEG獲取視頻關(guān)鍵幀并保存成jpg圖像的相關(guān)知識(shí),需要的朋友可以參考下
    2021-09-09
  • 關(guān)于C#中ajax跨域訪問問題

    關(guān)于C#中ajax跨域訪問問題

    最近做項(xiàng)目,需要跨域請(qǐng)求訪問數(shù)據(jù)問題。下面通過本文給大家分享C#中ajax跨域訪問代碼詳解,需要的朋友可以參考下
    2017-05-05
  • WPF開發(fā)之UniformGrid和ItemsControl的應(yīng)用詳解

    WPF開發(fā)之UniformGrid和ItemsControl的應(yīng)用詳解

    為了簡化開發(fā),WPF提供了UniformGrid布局和ItemsControl容器,本文以一個(gè)簡單的小例子,簡述如何在WPF開發(fā)中應(yīng)用UniformGrid和ItemsControl實(shí)現(xiàn)均勻的布局,希望對(duì)大家有所幫助
    2024-01-01
  • C#異步編程Task的創(chuàng)建方式

    C#異步編程Task的創(chuàng)建方式

    這篇文章介紹了C#異步編程Task的創(chuàng)建方式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • Unity實(shí)現(xiàn)菜品識(shí)別的示例代碼

    Unity實(shí)現(xiàn)菜品識(shí)別的示例代碼

    這篇文章主要介紹了如何通過Unity實(shí)現(xiàn)菜品識(shí)別,可以準(zhǔn)確識(shí)別圖片中的菜品名稱、位置、卡路里信息,并獲取百科信息。感興趣的小伙伴可以了解一下
    2022-02-02
  • C#開發(fā)之微信小程序發(fā)送模板消息功能

    C#開發(fā)之微信小程序發(fā)送模板消息功能

    這篇文章主要介紹了C#開發(fā)之微信小程序發(fā)送模板消息功能,需要的朋友可以參考下
    2017-09-09
  • C#使用udp如何實(shí)現(xiàn)消息的接收和發(fā)送

    C#使用udp如何實(shí)現(xiàn)消息的接收和發(fā)送

    這篇文章主要介紹了C#使用udp如何實(shí)現(xiàn)消息的接收和發(fā)送問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論