C#使用yield关键字让自定义集合实现foreach遍历的方法

 更新时间:2014年08月18日 11:35:37   投稿:shichen2014  
这篇文章主要介绍了C#使用yield关键字让自定义集合实现foreach遍历的方法,需要的朋友可以参考下

foreach遍历是C#常见的功能,而本文通过实例形式展现了C#使用yield关键字让自定义集合实现foreach遍历的方法。具体步骤如下:

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

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

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

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

class Person
{
    public string Name;
    public void SayHi()
    {
      Console.WriteLine("Hello: {0}",this.Name);
    }
}
//非常简单的自定义集合(- -简单到增加,删除,索引器等功能都没有实现) 该类没有实现IEnumerable接口
class PersonList
{
  Person[] pers =new Person[4];
  public PersonList()
  {
    pers[0] = new Person() { Name = "1" };
    pers[1] = new Person() { Name = "2" };
    pers[2] = new Person() { Name = "3" };
    pers[3] = new Person() { Name = "4" };

  }
//简单的迭代器方法
  public IEnumerator GetEnumerator()
  {
    foreach (Person item in pers)
    {
      //yield return 作用就是返回集合的一个元素,并移动到下一个元素上
      yield return item;
    }

  }
}
class Program
{  
  static void Main(string[] args)
  {
    PersonList list = new PersonList();
    foreach (Person item in list)
    {
      item.SayHi();
    }
    Console.ReadLine();    
  }
}

感兴趣的读者可以动手测试一下本文实例代码,相信会有新的收获。

相关文章

  • C# 面向对象三大特性:封装、继承、多态

    C# 面向对象三大特性:封装、继承、多态

    本文主要介绍了面向对象的三大特性:封装、继承、多态,提供了简单的示例供大家参考和理解。
    2016-03-03
  • C# 8.0新特性介绍

    C# 8.0新特性介绍

    C# 语言是在2000发布的,至今已正式发布了7个版本,每个版本都包含了许多令人兴奋的新特性和功能更新。下面通过本文给大家分享下C# 8.0的三个令人兴奋的新特性,需要的朋友参考下吧
    2017-10-10
  • C#和lua相互调用的方法教程

    C#和lua相互调用的方法教程

    lua是一种脚本语言,可以方便的移植到各种宿主语言中,并且可以支持热更新,在游戏开发中也能当做主要的语言来编写游戏的逻辑,所以这篇文章主要给大家介绍了关于C#和lua相互调用的方法教程,需要的朋友可以参考下。
    2017-11-11
  • C#实现对AES加密和解密的方法

    C#实现对AES加密和解密的方法

    C#实现对AES加密和解密的方法,需要的朋友可以参考一下
    2013-04-04
  • 算法基础之算法设计与分析

    算法基础之算法设计与分析

    这篇文章主要介绍了算法基础之算法设计与分析,贪心算法是一种解决优化问题的算法设计方法,其核心思想是在每一步选择当前状态下的最优解,从而希望最终达到全局最优解,需要的朋友可以参考下
    2023-10-10
  • 详解C#实现在Excel单元格中应用多种字体格式

    详解C#实现在Excel单元格中应用多种字体格式

    在Excel中,可对单元格中的字符串设置多种不同样式。本文,将以C#及VB.NET代码为例,介绍如何在Excel同一个单元格中应用多种字体样式,感兴趣的可以了解一下
    2022-05-05
  • C#减少垃圾回收压力的字符串操作详解

    C#减少垃圾回收压力的字符串操作详解

    这篇文章给大家详细分析了C#减少垃圾回收压力的字符串操作的相关知识点,有兴趣的朋友参考学习下吧。
    2018-03-03
  • C#更新SQLServer中TimeStamp字段(时间戳)的方法

    C#更新SQLServer中TimeStamp字段(时间戳)的方法

    这篇文章主要介绍了C#更新SQLServer中TimeStamp字段(时间戳)的方法,涉及C#操作数据库字段的相关技巧,需要的朋友可以参考下
    2015-05-05
  • WPF实现类似360安全卫士界面的程序源码分享

    WPF实现类似360安全卫士界面的程序源码分享

    最近在网上看到了新版的360安全卫士,感觉界面还不错,于是用WPF制作了一个,时间有限,一些具体的控件没有制作,用图片代替了。感兴趣的朋友一起跟着小编学习WPF实现类似360安全卫士界面的程序源码分享
    2015-09-09
  • C# winform实现右下角弹出窗口结果的方法

    C# winform实现右下角弹出窗口结果的方法

    这篇文章主要介绍了C# winform实现右下角弹出窗口结果的方法,结合实例形式分析了C#窗口操作的相关技巧,需要的朋友可以参考下
    2017-06-06

最新评论