• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#中对IEnumerableIEnumeratoryield的理解

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

    前段时间 用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 /// <summary>
5 /// 总结:如果想使用foreach 类必须实现IEnumerable.. 而它又需要IEnumerator. 这个可以用
6 /// yield 来实现, 也可以自己实现IEnumerator 接口
7 /// </summary>
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<ss.Length -1)
33 {
34 i = i + 1;
35 return true;
36 }
37 else
38 return false;
39 }
40 public void Reset()
41 {
42 i = -1;
43 }
44 public IEnumerator GetEnumerator()
45 {
46 return(this);
47 }
48 }
49 class main
50 {
51 public static void Main()
52 {
53 Test t = new Test();
54 foreach(string s in t)
55 Console.WriteLine(s);
56
57 Test2 t2 = new Test2();
58 foreach(string s in t2)
59 Console.WriteLine(s);
60 }
61 }




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c#MVC返回小驼峰Json(首字母小写)发布时间:2022-07-13
下一篇:
C#AOP实现原理发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap