zoukankan      html  css  js  c++  java
  • 使用yield关键字让自定义集合实现foreach遍历

           一般来说当我们创建自定义集合的时候为了让其能支持foreach遍历,就只能让其实现IEnumerable接口(可能还要实现IEnumerator接口)

    但是我们也可以通过使用yield关键字构建的迭代器方法来实现foreach的遍历,且自定义的集合不用实现IEnumerable接口

    注:虽然不用实现IEnumerable接口 ,但是迭代器的方法必须命名为GetEnumerator() ,返回值也必须是IEnumerator类型

    实例代码以及简单说明如下:

     1     class Person
     2     {
     3         public string Name;
     4         public void SayHi()
     5         {
     6             Console.WriteLine("Hello: {0}",this.Name);
     7         }
     8     }
     9     //非常简单的自定义集合(- -简单到增加,删除,索引器等功能都没有实现) 该类没有实现IEnumerable接口
    10     class PersonList
    11     {
    12         Person[] pers =new Person[4];
    13         public PersonList()
    14         {
    15             pers[0] = new Person() { Name = "1" };
    16             pers[1] = new Person() { Name = "2" };
    17             pers[2] = new Person() { Name = "3" };
    18             pers[3] = new Person() { Name = "4" };
    19 
    20         }
    21         //简单的迭代器方法
    22         public IEnumerator GetEnumerator()
    23         {
    24             
    25             foreach (Person item in pers)
    26             {
    27                 //yield return 作用就是返回集合的一个元素,并移动到下一个元素上
    28                 yield return item;
    29             }
    30 
    31         }
    32     }
    33     class Program
    34     {       
    35         static void Main(string[] args)
    36         {
    37             PersonList list = new PersonList();
    38             foreach (Person item in list)
    39             {
    40                 item.SayHi();
    41             }
    42             Console.ReadLine();           
    43         }
    44     }
  • 相关阅读:
    北京初“探”,还是初“谈”
    hadoop集群安装(多机,非伪集群)
    iOS8下注冊push方式变更
    Linux文件编辑命令具体整理
    HDU 1260
    二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)
    关于Linux静态库和动态库的分析
    JavaScript特效之前进,后退(返回上一级)
    具体解释Hibernate中的事务
    iOS开发
  • 原文地址:https://www.cnblogs.com/CodeFaker/p/3914698.html
Copyright © 2011-2022 走看看