有关协程的理解

本文介绍了Unity中IEnumerator和yield return的基本概念及使用方法。通过示例解释了IEnumerator如何构造迭代器,以及yield return如何简化迭代器的实现。

转自:https://blog.csdn.net/u013477973/article/details/55804729

IEnumerator Wait(float waitTimeValue){

//things before wait

yield return new WaitForSeconds(waitTimeValue);

//thigs after wait;

}

SatrtCoroutine(Wait(5.0f));

刚接触StartCoroutine时,只知道可以通过这种方式进行延时操作,至于IEnumerator类型,yield return这种奇怪的语句以及

调用的时候要在StartCoroutine()里进行这几个问题,一直是一脸蒙蔽,什么鬼嘛这是,

在慢慢看了一些博主的文章后,对这几个问题有了初步的认识,就在这里记录下来:

1.IEnumerator

IEnumerator和yield return会构造出一个迭代器,迭代器几乎经常在用,例如:

int[] array=new int[]{1,2,3};

foreach(int i in array){

print(i);

}

数组的遍历过程实际上就是一个迭代器应用过程,只不过这个迭代器是由编译器帮我们实现,在编译器的内部,上面的代码类似这个样子(真正的比下面的要复杂):

int[] array=new int[]{1,2,3};

IEnumerator e=array.GetEnumerator();

while(e.MoveNext()){

print(Current);

}

至于迭代器内的方法MoveNext()和属性Current是IEnumerator这个接口定义的,这里是IEnumerator的完整声明:

public interface IEnumerator
{
//
// 摘要:
// 获取集合中的当前元素。
//
// 返回结果:
// 集合中的当前元素。
//
// 异常:
// T:System.InvalidOperationException:
// 枚举数定位在该集合的第一个元素之前或最后一个元素之后。
object Current { get; }

    //
    // 摘要:
    //     将枚举数推进到集合的下一个元素。
    //
    // 返回结果:
    //     如果枚举数成功地推进到下一个元素,则为 true;如果枚举数越过集合的结尾,则为 false。
    //
    // 异常:
    //   T:System.InvalidOperationException:
    //     在创建了枚举数后集合被修改了。
    bool MoveNext();
    //
    // 摘要:
    //     将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。
    //
    // 异常:
    //   T:System.InvalidOperationException:
    //     在创建了枚举数后集合被修改了。
    void Reset();
}

2.yield return是干什么的

yield return 是C#2.0以后引入的现实迭代器的一种简便语法,在之前如果要实现一个完整的迭代器
需要实现IEnumerable和IEnumerator这两个接口,而使用yield retrun可以省略这两个步骤:
例如:
IEnumerator Test(){
yield return 1;
yield retutn 2;
yield retrun 3;
}
编译器会生成类似代码:
public class InnerEnumerable:IEnumerable{
public class InnerEnumerator:IEnumerator{
int[] array=new int[]{1,2,3};
int currentIndex=-1

public bool MoveNext(){
++currentIndex;
return current

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值