zoukankan      html  css  js  c++  java
  • foreach是怎么实现遍历的

    using System;

    using System.Collections;

    using System.Collections.Generic;

    using System.Linq; using System.Text;

    using System.Threading.Tasks;

    namespace ConsoleApplication2 {  

       class Program     {      

       static void Main(string[] args)       

      {            

    Person per = new Person();           

      //如果直接遍历person,会提示person不包含getEnumrator的公共定义,所以foreach语句不能作用于person的变量       

          //foreach (string item in per)            

    //{

    //}           

      //当person实心了iEnumreble接口时,其实目的只是为了实现接口中的IEnumerator的方法,此时foreach不在冒红了         

        foreach (string item in per)           

      {                

    Console.WriteLine(item);        

         }                      

               Console.Read();       

      }    

    }   

      public class Person : IEnumerable   

      {       

      public string Name { get; set; }    

         public int Age { get; set; }     

        private string[] strArray = new string[] { "aaa", "bbb", "ccc", "ddd" };

        /// <summary> /// 这就是枚举器  /// </summary>      

       /// <returns></returns>       

      public IEnumerator GetEnumerator()        

    {            

    //返回实现了IEnumerator接口的枚举器            

    return new PersonEnumrator(strArray);        

    }

    }    

    /// <summary> /// 自己写一个枚举器,并且实现IEnumerator,然后需要重写IEnumerator中的方法 /// </summary>    

    public class PersonEnumrator : IEnumerator    

    {        

    //声明数组        

    string[] strArray;        

    /// <summary> /// 构造函数,初始化数组  /// </summary>        

    /// <param name="arr"></param>        

    public PersonEnumrator(string[] arr)        

    {           

      if (arr != null)                

    strArray = arr;        

    }        

    int index = -1;//下标        

    /// <summary>         /// 返回数组中下标为index的值         /// </summary>        

    public object Current        

    {            

    get { return strArray[index]; }        

    }        

    /// <summary>         /// index自增一,判断index是否在数组的范围之内         /// </summary>        

    /// <returns>在范围内,返回TRUE,否则返回FALSE</returns>        

    public bool MoveNext()        

    {            

    index++;            

    while (index < strArray.Length)            

    {

                    return true;            

    }            

    return false;        

    }        

    /// <summary>         /// 将下标重置         /// </summary>        

    public void Reset()        

    {            

    index = -1;        

    }     }

    }

  • 相关阅读:
    安装原版Win8.1并激活
    Java8 List<对象> 转 Set、Map(高级)、排序、分组、统计
    SpringCloud第二弹(高可用Eureka+Ribbon负载均衡)
    SpringCloud第一弹(入门)
    SpringBoot+Shiro+Redis共享Session入门小栗子
    Go语言(IDEA下+Eclipse下)Hello World
    Linux学习杂谈
    小孩儿才分对错,成年人只看利弊
    Xshell5
    91 Testing MySQL学习总结
  • 原文地址:https://www.cnblogs.com/codinggao/p/3751005.html
Copyright © 2011-2022 走看看