[C#] C# IEnumerable和IEnumrator用法 →→→→→进入此内容的聊天室

来自 , 2019-11-22, 写在 C#, 查看 131 次.
URL http://www.code666.cn/view/abe8e03e
  1. /*
  2.  * Created by SharpDevelop.
  3.  * User: Owner
  4.  * Date: 2012-12-14
  5.  * Time: 13:43
  6.  *
  7.  * To change this template use Tools | Options | Coding | Edit Standard Headers.
  8.  */
  9. using System;
  10. using System.Collections;
  11.  
  12. /// <summary>
  13. /// IEnumerable和IEnumrator组合起来使用实现foreach。
  14. /// </summary>
  15. namespace TestIEnumeratorAndIEnumratable
  16. {
  17.         /// <summary>
  18.         /// 个体类:这个类保存了单个体的信息和一个方法
  19.         /// </summary>
  20.         public class 个体
  21.         {
  22.                 public string 信息1;
  23.                 public string 信息2;
  24.                
  25.                 public 个体(string 信息1, string 信息2)
  26.                 {
  27.                         this.信息1 = 信息1;
  28.                         this.信息2 = 信息2;
  29.                 }
  30.                
  31.                 public void 报数()
  32.                 {
  33.                         Console.WriteLine(this.信息1 + " = " + this.信息2);
  34.                 }
  35.         }
  36.        
  37.         /// <summary>
  38.         /// 集体类:继承自IEnumerable接口,并提供foreach的可能。
  39.         /// </summary>
  40.         public class 集体 : IEnumerable
  41.         {
  42.                 /// <summary>
  43.                 /// 集体就是一票个体
  44.                 /// </summary>
  45.                 private 个体[] 一票个体;
  46.                
  47.                 /// <summary>
  48.                 /// 这个集体为了简便,是有初始的一群个体凑一块组成的。
  49.                 /// </summary>
  50.                 /// <param name="pArray"></param>
  51.                 public 集体(个体[] pArray)
  52.                 {
  53.                         一票个体 = new 个体[pArray.Length];
  54.                         for (int i = 0; i < pArray.Length; i++)
  55.                                 一票个体[i] = pArray[i];
  56.                 }
  57.                
  58.                 /// <summary>
  59.                 /// 接口IEnumerable的实现函数,获取foreach用到的迭代器
  60.                 /// </summary>
  61.                 /// <returns></returns>
  62.                 public IEnumerator GetEnumerator()
  63.                 {
  64.                         return new 个体指针(一票个体);
  65.                 }
  66.         }
  67.        
  68.         /// <summary>
  69.         /// 个体指针:针对个体类的迭代器,继承自IEnumerator。
  70.         /// 提供了迭代器的走向函数支持。
  71.         /// </summary>
  72.         public class 个体指针 : IEnumerator
  73.         {
  74.                 /// <summary>
  75.                 /// 一票个体的指针
  76.                 /// </summary>
  77.                 public 个体[] 一票个体的指针;
  78.                
  79.                 /// <summary>
  80.                 /// 迭代器当前位置的指示标志
  81.                 /// </summary>
  82.                 int 位置 = -1;
  83.                
  84.                 /// <summary>
  85.                 /// 个体指针的赋值:指向一堆无管理的个体
  86.                 /// </summary>
  87.                 /// <param name="list"></param>
  88.                 public 个体指针(个体[] list)
  89.                 {
  90.                         一票个体的指针 = list;
  91.                 }
  92.                
  93.                 /// <summary>
  94.                 /// 接口IEnumerator的实现函数,迭代器下移。foreach用到,我们不调用。
  95.                 /// </summary>
  96.                 /// <returns></returns>
  97.                 public bool MoveNext()
  98.                 {
  99.                         位置++;
  100.                         return (位置 < 一票个体的指针.Length);
  101.                 }
  102.                
  103.                 /// <summary>
  104.                 /// 接口IEnumerator的实现函数,迭代器复位。foreach用到,我们不调用。
  105.                 /// </summary>
  106.                 public void Reset()
  107.                 {
  108.                         位置 = -1;
  109.                 }
  110.                
  111.                 /// <summary>
  112.                 /// 接口IEnumerator的实现函数,获取当前值。foreach用到,我们不调用。
  113.                 /// </summary>
  114.                 public object Current
  115.                 {
  116.                         get
  117.                         {
  118.                                 try
  119.                                 {
  120.                                         return 一票个体的指针[位置];
  121.                                 }
  122.                                 catch(IndexOutOfRangeException)
  123.                                 {
  124.                                         throw new InvalidOperationException();
  125.                                 }
  126.                         }
  127.                 }
  128.         }
  129.         class Program
  130.         {
  131.                 public static void Main(string[] args)
  132.                 {
  133.                         个体[] 个体集合 = new 个体[3]
  134.                         {
  135.                                 new 个体("1", "One"),
  136.                                 new 个体("2", "Two"),
  137.                                 new 个体("3", "Three")
  138.                         };
  139.                        
  140.                         集体 list = new 集体(个体集合);
  141.                         foreach (个体 p in list)
  142.                                 p.报数();
  143.                        
  144.                         Console.ReadKey();
  145.                 }
  146.         }
  147. }
  148.  
  149.  
  150. //csharp/5932

回复 "C# IEnumerable和IEnumrator用法"

这儿你可以回复上面这条便签

captcha