亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#中的IEnumerable簡介及簡單實現(xiàn)實例

 更新時間:2015年03月16日 09:47:34   投稿:junjie  
這篇文章主要介紹了C#中的IEnumerable簡介及簡單實現(xiàn)實例,本文講解了IEnumerable一些知識并給出了一個簡單的實現(xiàn),需要的朋友可以參考下

IEnumerable這個接口在MSDN上是這么說的,它是一個公開枚舉數(shù),該枚舉數(shù)支持在非泛型集合上進行簡單的迭代。換句話說,對于所有數(shù)組的遍歷,都來自IEnumerable,那么我們就可以利用這個特性,來定義一個能夠遍歷字符串的通用方法.

下面先貼出code.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
 
namespace mycs
{
  class Program
  {
    static void Main(string[] args)
    {
      charlist mycharlist = new charlist("hello world");
      foreach (var c in mycharlist)
      {
        Console.Write(c);
      }
     Console.ReadLine();
    }
  }
 
  class charlist : IEnumerable
  {
    public string TargetStr { get; set; }
 
    public charlist(string str)
    {
      this.TargetStr = str;
    }
    public IEnumerator GetEnumerator()
    {
      //c# 1.0
      return new CharIterator(this.TargetStr);
      //c# 2.0
      /*
      for (int index = this.TargetStr.Length; index > 0;index-- )
      {
        yield return this.TargetStr[index - 1];
      }
       */
    }
  }
  class CharIterator : IEnumerator
  {
    public string TargetStr { get; set; }
    public int position { get; set; }
 
    public CharIterator(string targetStr)
    {
      this.TargetStr = targetStr;
      this.position = this.TargetStr.Length;
    }
    public object Current
    {
      get
      {
        if (this.position==-1||this.position==this.TargetStr.Length)
        {
          throw new InvalidOperationException();
        }
        return this.TargetStr[this.position];
      }
    }
    public bool MoveNext()
    {
      if (this.position!=-1)
      {
        this.position--;
      }
      return this.position > -1;
    }
    public void Reset()
    {
      this.position = this.TargetStr.Length;
    }
  }
}


在上面的例子c# 1.0中,CharIterator就是迭代器的實現(xiàn),position字段存儲當(dāng)前的迭代位置,通過Current屬性可以得到當(dāng)前迭代位置的元素,MoveNext方法用于更新迭代位置,并且查看下一個迭代位置是不是有效的。

當(dāng)我們通過VS單步調(diào)試下面語句的時候:

復(fù)制代碼 代碼如下:

foreach (var c in charList)

代碼首先執(zhí)行到foreach語句的charList處獲得迭代器CharIterator的實例,然后代碼執(zhí)行到in會調(diào)用迭代器的MoveNext方法,最后變量c會得到迭代器Current屬性的值;前面的步驟結(jié)束后,會開始一輪新的循環(huán),調(diào)用MoveNext方法,獲取Current屬性的值。

通過C# 1.0中迭代器的代碼看到,要實現(xiàn)一個迭代器就要實現(xiàn)IEnumerator接口,然后實現(xiàn)IEnumerator接口中的MoveNext、Reset方法和Current屬性。

在C# 2.0中可以直接使用yield語句來簡化迭代器的實現(xiàn)。

如上面public IEnumerator GetEnumerator()方法中注釋掉的部分。
通過上面的代碼可以看到,通過使用yield return語句,我們可以替換掉整個CharIterator類。

yield return語句就是告訴編譯器,要實現(xiàn)一個迭代器塊。如果GetEnumerator方法的返回類型是非泛型接口,那么迭代器塊的生成類型(yield type)是object,否則就是泛型接口的類型參數(shù)。

相關(guān)文章

  • C#鍵盤輸入回車鍵實現(xiàn)點擊按鈕效果的方法

    C#鍵盤輸入回車鍵實現(xiàn)點擊按鈕效果的方法

    這篇文章主要介紹了C#鍵盤輸入回車鍵實現(xiàn)點擊按鈕效果的方法,可實現(xiàn)用回車鍵代替點擊按鈕的功能,是非常實用的技巧,需要的朋友可以參考下
    2014-09-09
  • 字符串和十六進制之間的轉(zhuǎn)換方法實例

    字符串和十六進制之間的轉(zhuǎn)換方法實例

    這篇文章介紹了字符串和十六進制之間的轉(zhuǎn)換方法實例,有需要的朋友可以參考一下
    2013-11-11
  • C#窗體布局方式詳解

    C#窗體布局方式詳解

    這篇文章主要介紹了C#窗體布局方式詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • C#中TreeView實現(xiàn)適合兩級節(jié)點的選中節(jié)點方法

    C#中TreeView實現(xiàn)適合兩級節(jié)點的選中節(jié)點方法

    這篇文章主要介紹了C#中TreeView實現(xiàn)適合兩級節(jié)點的選中節(jié)點方法,實例分析了C#中TreeView節(jié)點操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C#中WPF內(nèi)存回收與釋放LierdaCracker的實現(xiàn)

    C#中WPF內(nèi)存回收與釋放LierdaCracker的實現(xiàn)

    本文主要介紹了C#中WPF內(nèi)存回收與釋放LierdaCracker的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#代碼實現(xiàn)PDF文檔操作類

    C#代碼實現(xiàn)PDF文檔操作類

    本篇文章給大家介紹使用pdf文檔操作C#代碼,本文代碼非常簡單,代碼附有注釋,需要注意的是:需要添加itextsharp.dll引用才可以正常通過編譯,感興趣的朋友可以參考下
    2015-10-10
  • C#中如何使用 XmlReader 讀取XML文件

    C#中如何使用 XmlReader 讀取XML文件

    本文介紹了C#中使用XmlReader,只讀、向前、循環(huán)讀取XML節(jié)點的方法,并為我們列出、XmlReader類的方法、屬性、枚舉等成員,希望對大家學(xué)習(xí)有所幫助。
    2016-05-05
  • C# 泛型接口的抗變和協(xié)變

    C# 泛型接口的抗變和協(xié)變

    本篇文章主要介紹了C#中泛型接口的抗變和協(xié)變的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • C#簡單多線程同步和優(yōu)先權(quán)用法實例

    C#簡單多線程同步和優(yōu)先權(quán)用法實例

    這篇文章主要介紹了C#簡單多線程同步和優(yōu)先權(quán)用法實例,對于C#線程的阻塞、同步、異步、互斥等概念做了較為深入的分析與實例講解,需要的朋友可以參考下
    2014-09-09
  • C#實現(xiàn)Redis的分布式鎖

    C#實現(xiàn)Redis的分布式鎖

    我們在開發(fā)很多業(yè)務(wù)場景會使用到鎖,例如庫存控制,抽獎等。分布式與單機情況下最大的不同在于其不是多線程而是多進程。本文就來介紹一下,感興趣的可以了解一下
    2021-08-08

最新評論