zoukankan      html  css  js  c++  java
  • C# foreach 原理以及模拟的实现

     public class Person:IEnumerable     //定义一个person类  并且 实现IEnumerable 接口  (或者不用实现此接口 直接在类 //里面写个GetEnumerator()方法)
        {
            string[] names = { "小杨", "科比布莱恩特", "凯文杜兰特", "卡门安东尼" }; //在Person类里面定义一个字符串数组,以便用来模仿对象的索引访问

            public int Count { get { return names.Length; } }    //可以通过对象访问此属性

         
            public string this[int index]    //定义一个索引器
            {
                get { return names[index]; }
            }


            public IEnumerator GetEnumerator()
            {
                return new MyClass(names);             //实际上通过此方法就是返回一个可以实现循环的类的对象  
                                                       // 用他的对象来移动索引
            }
        }




          public class MyClass :IEnumerator
          {
              public MyClass(string[] names)                //一个参数的构造函数,用来和要遍历的类的进行关联
              {
                  name = names;
              }
              private string[] name;                        //用此字段来存放接收过来的数组
              int index = -1;
              public object Current                        //获取当前索引的元素的值
              {
                  get 
                  {
                      if (index<0)                        //准备状态是-1,开始循环了在MoveNext中加1
                      {
                          return null;
                      }
                      else
                      {
                          return name[index];
                      }
                  }
              }


              public bool MoveNext()
              {
                  ++index;                                      //每调用此方法就将索引往下+1
                  if (index<name.Length)
                  {
                      return true;
                  }
                  else
                  {
                      return false;
                  }
              }


              public void Reset()
              {
                 index=-1;
              }

          }

    在主方法里面:

      class Program
        {
            static void Main(string[] args)
            {
                Person p = new Person();
                //for (int i = 0; i < p.Count; i++)
                //{
                //    Console.WriteLine(p[i]);
                //}
                foreach (string item in p)
                {
                    Console.WriteLine(item);
                }
                //实际执行foreach就相当于执行下面几句话:
                Console.WriteLine("==================================================");
                IEnumerator p1 = p.GetEnumerator();
                while (p1.MoveNext())
                {
                    string str=(string)p1.Current;
                    Console.WriteLine(str);
                }
                Console.ReadKey();
            }
        }

  • 相关阅读:
    巨蟒django之权限9:前端展示修改删除合并&&权限展示
    巨蟒django之权限8:排序&&菜单展开权限归属
    巨蟒django之权限7:动态生成一级&&二级菜单
    巨蟒django之权限6: 权限控制表设计&&登录权限
    巨蟒django之CRM5 学习记录&&课程记录&&班级管理&&私户的数量上限
    巨蟒django之CRM4 一些小功能
    巨蟒django之CRM3 添加和编辑客户&&公户和私户的展示和转换
    巨蟒django之CRM2 展示客户列表&&分页
    巨蟒django之CRM1 需求分析&&表结构设计&&注册登录验证
    sysfs接口函数到建立_DEVICE_ATTR
  • 原文地址:https://www.cnblogs.com/ityuanmanito/p/4039993.html
Copyright © 2011-2022 走看看