博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 中对 IEnumerable IEnumerator yield 的理解
阅读量:5122 次
发布时间:2019-06-13

本文共 1560 字,大约阅读时间需要 5 分钟。

    前段时间 用C# 来写 Unity3D(一款游戏引擎) 中的行为脚本. 其中有一个非常重要的概念是"协同程序", 我的理解就是用来完成一系列的有先后顺序的操作.比如做为一个动画后.等上一段时间 再进行下一步操作. 它的好处在于 可以不影响当前的时间线类似于单开一个线程一样的来完成这个工作.

    在Unity3D中完成协同程序的操作是这样的.用StartCoroutine(method());的方法来调用,method方法必须返回一个IEnumerator类型的方法:IEnumerator Fun() {yield return ...}. 

    所以想了解一下  IEnumerable IEnumerator yield  这几个关键字.在C#中的功能都是什么? 通过在网上的资料了解到 就是为了让类可以用foreach来遍历. 

  想用foreach遍历类,类主要是需要有返回IEnumerator 类型的方法 . 不一定继承IEnumerable接口(虽然不在代码中明确的写上实现 IEnumerable 也是没有问题的. 但写上还是规范些. 别人能看懂.鼓励写上.).. 只有这个方法即可. 而这个方法的实现可以有两种情况. 一种是自己去实现接口中的方法 Current MoveNext() Reset(),还有一种就是用yield return .. 方法 . 他会自动的产生IEnumerator 的那三个方法. 所以非常的方便实用..:

 

View Code
1 using System;  2 using System.Collections;  3  4 ///   5 /// 总结:如果想使用foreach 类必须实现IEnumerable.. 而它又需要IEnumerator. 这个可以用  6 /// yield 来实现, 也可以自己实现IEnumerator 接口  7 ///   8  9 class Test : IEnumerable //使用 yield return 来自动的生成 IEnumerator 方法 10 {
11 public IEnumerator GetEnumerator() 12 {
13 yield return "hello"; 14 yield return "world"; 15 yield return "who are you?"; 16 } 17 } 18 class Test2 : IEnumerator,IEnumerable //自己实现 IEnumerator 方法, 19 {
20 string[] ss = {
"I am Test2","haha","yehh","Movie"}; 21 int i = -1; //为了在一开始调用Current 时不报错 所以这个值给成-1. 因为在调用Current前会调用 MoveNext 方法 22 23 public Object Current 24 {
25 get 26 {
27 return ss[i]; 28 } 29 } 30 public bool MoveNext() 31 {
32 if (i

转载于:https://www.cnblogs.com/easyfrog/archive/2011/12/29/IEnumerable_IEnumerator_yield.html

你可能感兴趣的文章
数据库3
查看>>
存储分类
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Yii2 Lesson - 03 Forms in Yii
查看>>
Python IO模型
查看>>
Ugly Windows
查看>>
DataGridView的行的字体颜色变化
查看>>
Java再学习——关于ConcurrentHashMap
查看>>
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Day19内容回顾
查看>>
第七次作业
查看>>
SpringBoot项目打包
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
《QQ欢乐斗地主》山寨版
查看>>
文件流的使用以及序列化和反序列化的方法使用
查看>>
Android-多线程AsyncTask
查看>>