zoukankan      html  css  js  c++  java
  • Foreach 原理

     1  public class Person
     2     {
     3         private string[] friends = { "asf", "ewrqwe", "ddd", "eeee" };
     4         public string name { get; set; }
     5 
     6         public int age { get; set; }
     7         //这是第一种方法 
     8         public IEnumerable ForEach()
     9         {
    10             for (int i = 0; i < friends.Length; i++)
    11             {
    12                 yield return friends[i];
    13             }
    14         }
    15 }

    调用

     1  class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             Person p = new Person();
     6            
     7             foreach (var item in p.ForEach())
     8             {
     9                 Console.WriteLine(item);
    10             }
    11          
    12             Console.Read();
    13         }
    14     }

    第二种 方法

      class Program
        {
            static void Main(string[] args)
            {
                Person p = new Person();
               
                foreach (var item in p)
                {
                    Console.WriteLine(item);
                }
             
                Console.Read();
            }
        }
    
        public class Person
        {
            private string[] friends = { "asf", "ewrqwe", "ddd", "eeee" };
            public string name { get; set; }
    
            public int age { get; set; }
    
            //这是第二种
            ////当返回值类型是IEnumerator时,
            //编译器帮我们生成了一个“枚举器”类,
            //即:一个实现了IEnumerator接口的类型。
            public IEnumerator GetEnumerator()
            {
                for (int i = 0; i < friends.Length; i++)
                {
                    yield return friends[i];
                }
            }
        }
    View Code
     
    第三种 方法  自己生产枚举器
     1  class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             Person p = new Person();
     6            
     7             foreach (var item in p)
     8             {
     9                 Console.WriteLine(item);
    10             }
    11          
    12             Console.Read();
    13         }
    14     }
    15 
    16     public class Person
    17     {
    18         private string[] friends = { "asf", "ewrqwe", "ddd", "eeee" };
    19         public string name { get; set; }
    20 
    21         public int age { get; set; }
    22 
    23         //这是第二种
    24         ////当返回值类型是IEnumerator时,
    25         //编译器帮我们生成了一个“枚举器”类,
    26         //即:一个实现了IEnumerator接口的类型。
    27         public IEnumerator GetEnumerator()
    28         {
    29             return new PersonEnumerator(friends);
    30         }
    31     }
    32 
    33     
    34     //枚举器
    35     public class PersonEnumerator : IEnumerator
    36     {
    37         private string[] frends;
    38         //使用构造函数 传值
    39         public PersonEnumerator(string[] fs)
    40         {
    41             frends = fs;
    42         }
    43         private int index = -1;
    44 
    45 
    46         public object Current
    47         {
    48             get
    49             {
    50                 if (index >= 0 && index < frends.Length)
    51                 {
    52                     return frends[index];
    53                 }
    54                 else
    55                 {
    56                     throw new NotImplementedException();
    57                 }
    58             }
    59         }
    60 
    61         public bool MoveNext()
    62         {
    63             if (index + 1 < frends.Length)
    64             {
    65                 index++;
    66                 return true;
    67             }
    68             return false;
    69         }
    70 
    71         public void Reset()
    72         {
    73             index = -1;
    74 
    75         }
    76 
    77        
    78     }
    View Code
     
  • 相关阅读:
    mac修改brew源
    分屏工具xpanes
    MySQL自增id不连续问题
    Ubuntu16.04安装zkui
    antlr解析hive语句
    Elasticsearch学习笔记——索引模板
    Elasticsearch6.2.1安装elasticsearch-sq插件
    多用户同时操作一条Mysql记录问题
    Nexus上传npm包
    Nginx请求转发
  • 原文地址:https://www.cnblogs.com/nanxiaoxiang/p/6234890.html
Copyright © 2011-2022 走看看