当前位置: 首页 > 编程笔记 >

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

岳阳文
2023-03-14
本文向大家介绍C#使用yield关键字让自定义集合实现foreach遍历的方法,包括了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();    
  }
}

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

 类似资料:
  • 《 Java Iterator遍历Collection集合元素》一节中主要讲解如何使用 Iterator 接口迭代访问 Collection 集合里的元素,除了这个方法之外,我们还可以使用 Java 5 提供的 foreach 循环迭代访问集合元素,而且更加便捷。如下程序示范了使用 foreach 循环来迭代访问集合元素。 输出结果为: 小牛知识库C++教程 小牛知识库C语言教程 小牛知识库Jav

  • 问题内容: 有没有办法循环遍历一个?Xcode说 通用结构’ForEach’要求’[String:Int]’符合’RandomAccessCollection’ 所以有没有办法使Swift字典符合,或者因为字典是无序的,那是不可能的吗? 我尝试过的一件事是迭代字典的键: 但不是s 的数组,而是类型(不确定何时更改)。我知道我可以编写一个辅助函数,该函数接受字典并返回键的数组,然后可以迭代该数组,但

  • 本文向大家介绍深入理解C#中foreach遍历的使用方法,包括了深入理解C#中foreach遍历的使用方法的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍了关于C#中foreach遍历的用法以及c#使用foreach需要知道的一些事,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 一、C#中foreach遍历用法 foreach循环用于列举出集合中所有的元素,fo

  • 本文向大家介绍C#编程实现自定义热键的方法,包括了C#编程实现自定义热键的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#编程实现自定义热键的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 问题内容: 我可以在varArgs上使用还是在varArgs上使用? 问题答案: 变量参数的行为与数组相似,因此您可以使用来获取变量变量中的一个: 您可以使用以下方法遍历它们:

  • 原文:http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained 注:这是一篇 stackoverflow 上一个火爆帖子的译文 问题 Python 关键字 yield 的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self,