时间:2021-05-20
1、C#迭代器
1.1、IEnumerable和IEnumerator
C#中的迭代器封装在IEnumerable和IEnumerator和他们的泛型接口中。
IEnumerable:定义了一个可以获取IEnumerator的方法---GetEnumerator()。
//IEnumerable的代码实现 public interface IEnumerable { IEnumerator GetEnumerator(); }IEnumerator:则在目标序列上实现循环迭代,直到不再需要数据。常见的foreach循环就是使用这个接口
//IEnumerator的代码实现 public interface IEnumerator { /// <summary> /// 获取当前的项(只读属性) /// </summary> object Current { get; } /// <summary> /// 将游标的内部位置向前移动 /// </summary> /// <returns>是否成功</returns> bool MoveNext(); /// <summary> /// 将游标重置到第一个成员前面 /// </summary> void Reset(); }但是为什么会有两个接口呢?为什么不直接让IEnumerable实现所有方法呢?
为了不违背单一职责原则。如果有几个嵌套的foreach循环,那么彼此就可能会收到影响了。
1.2、迭代器使用
C#中的数组和集合都是继承了IEnumerable接口的,所以我们可以直接使用。
static void Main(string[] args){ int[] arr = new int[5] { 12, 65, 749, 16, 49 }; //foreach (int item in arr) //{ // Console.WriteLine(item); //} #region 和上面的foreach相同 IEnumerator e = arr.GetEnumerator(); //获取要迭代的对象 while (e.MoveNext()) //一个一个的读取元素,读取完会返回false { Console.WriteLine(e.Current); //输出读取内容 } #endregion}自定义类中使用迭代器。
/// <summary> /// 动物园类,里面有很多动物 /// </summary> public class Zoo : IEnumerable { Animal[] animals = new Animal[3]; public Zoo() { animals[0] = new Animal("张三"); animals[1] = new Animal("李四"); animals[2] = new Animal("赵五"); } public IEnumerator GetEnumerator() { return this.animals.GetEnumerator(); } } /// <summary> /// 动物类,每个动物有其名字 /// </summary> public class Animal { private string name; public string Name { get { return name; } } public Animal(string name) { this.name = name; } } static void Main(string[] args) { Zoo zoo = new Zoo(); //可以直接使用foreach迭代 foreach (Animal animal in zoo) { Console.WriteLine(animal.Name); } Console.ReadKey(); }2、Unity中的协程
2.1、进程 线程 协程介绍
进程:
线程:
协程:
2.2、协程使用
Unity的协程系统是基于C#的一个简单而强大的接口 ,IEnumerator。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在这之前,有很多人在质疑Unity支不支持多线程,事实上Unity是支持多线程的。而提到多线程就要提到Unity非常常用的协程,然而协程并非真正的多线程。协程其
本文实例讲述了php和C#的yield迭代器实现方法对比。分享给大家供大家参考,具体如下:yield关键字是用来方便实现迭代器的,免去了手工写迭代器的繁琐。迭代
本文实例讲述了Python协程yield与协程greenlet简单用法。分享给大家供大家参考,具体如下:协程协程,又称微线程,纤程。英文名Coroutine。协
这篇文章是读者朋友的python协程的学习经验之谈,以下是全部内容:协程的历史说来话长,要从生成器开始讲起。如果你看过我之前的文章python奇遇记:迭代器和生
本文以实例形式简单简述了C#迭代器模式的实现方法,分享给大家供大家参考。具体方法如下:一般来说,迭代器模式的需求来自:需要对一些集合进行迭代,而迭代的方式可能有