zoukankan      html  css  js  c++  java
  • IEnumerable、GetEnumerator、IEnumerator之间的关系。

    了解了这些也就明白了遍历的原理,晚安。

      1 using System;
      2 using System.Collections;
      3 
      4 public class Person
      5 {
      6     public Person(string fName, string lName)
      7     {
      8         this.firstName = fName;
      9         this.lastName = lName;
     10     }
     11 
     12     public string firstName;
     13     public string lastName;
     14 }
     15 
     16 public class People : IEnumerable
     17 {
     18     private Person[] _people;
     19     public People(Person[] pArray)
     20     {
     21         _people = new Person[pArray.Length];
     22 
     23         for (int i = 0; i < pArray.Length; i++)
     24         {
     25             _people[i] = pArray[i];
     26         }
     27     }
     28 
     29     IEnumerator IEnumerable.GetEnumerator()
     30     {
     31        return (IEnumerator) GetEnumerator();
     32     }
     33 
     34     public PeopleEnum GetEnumerator()
     35     {
     36         return new PeopleEnum(_people);
     37     }
     38 }
     39 
     40 public class PeopleEnum : IEnumerator
     41 {
     42     public Person[] _people;
     43 
     44     // Enumerators are positioned before the first element
     45     // until the first MoveNext() call.
     46     int position = -1;
     47 
     48     public PeopleEnum(Person[] list)
     49     {
     50         _people = list;
     51     }
     52 
     53     public bool MoveNext()
     54     {
     55         position++;
     56         return (position < _people.Length);
     57     }
     58 
     59     public void Reset()
     60     {
     61         position = -1;
     62     }
     63 
     64     object IEnumerator.Current
     65     {
     66         get
     67         {
     68             return Current;
     69         }
     70     }
     71 
     72     public Person Current
     73     {
     74         get
     75         {
     76             try
     77             {
     78                 return _people[position];
     79             }
     80             catch (IndexOutOfRangeException)
     81             {
     82                 throw new InvalidOperationException();
     83             }
     84         }
     85     }
     86 }
     87 
     88 class App
     89 {
     90     static void Main()
     91     {
     92         Person[] peopleArray = new Person[3]
     93         {
     94             new Person("John", "Smith"),
     95             new Person("Jim", "Johnson"),
     96             new Person("Sue", "Rabon"),
     97         };
     98 
     99         People peopleList = new People(peopleArray);
    100         foreach (Person p in peopleList)
    101             Console.WriteLine(p.firstName + " " + p.lastName);
    102 
    103     }
    104 }
    105 
    106 /* This code produces output similar to the following:
    107  *
    108  * John Smith
    109  * Jim Johnson
    110  * Sue Rabon
    111  *
    112  */
     
  • 相关阅读:
    绿色通用的网站后台系统管理模板
    本站源码免费下载-木庄网络博客
    expr 数字操作
    wget 实现web监控脚本
    wget 监控web服务器
    read + 计算
    判断字符串长度
    替换字符串
    shell 字符串操作
    shell 定义变量
  • 原文地址:https://www.cnblogs.com/nyth/p/3655433.html
Copyright © 2011-2022 走看看