zoukankan      html  css  js  c++  java
  • IEnumerator IEnumerable 总结 part I

    如果要迭代一个类,可使用GetEnumerator()方法,其返回值类型是IEnumerator,可以让该类继承IEnumerator, IEnumerable这两个接口,foreach语句隐式地调用了集合的无参数GetEnumerator方法以获得一个枚举器我找了一个曾经做过的例子:
    Code

    由集合所定义的只能有一个这样的无参数 GetEnumerator方法,但经常有多种枚举方式,以及通过参数控制枚举的方法。在这种情况下,集合可以使用迭代器实现返回可枚举接口之一的属性和方法。如下:
     1 class MusicTitles
     2    {
     3       string[] names = {
     4          "Tubular Bells"
     5          "Hergest Ridge",
     6          "Ommadawn"
     7          "Platinum"
     8       };
     9 
    10       public IEnumerator GetEnumerator()
    11       {
    12          for (int i = 0; i < 4; i++)
    13          {
    14             yield return names[i];
    15          }
    16       }
    17 
    18       public IEnumerable Reverse()
    19      {
    20         for (int i = 3; i >= 0; i--)
    21         {
    22             yield return names[i];
    23         }
    24       }
    25 
    26       public IEnumerable Subset( int index, int length)
    27       {
    28          for (int i = index; i < index + length; i++)
    29          {
    30             yield return names[i];
    31          }
    32       }
    33 
    34       public static void testMusicTitels()
    35       {
    36          MusicTitles titles = new MusicTitles();
    37          foreach (string title in titles)
    38          {
    39             Console.WriteLine(title);
    40          }
    41 
    42          Console.WriteLine();
    43          Console.WriteLine("reverse");
    44          foreach (string title in titles.Reverse())
    45          {
    46             Console.WriteLine(title);
    47          }
    48          Console.WriteLine();
    49          Console.WriteLine("subset");
    50          foreach (string title in titles.Subset(22))
    51          {
    52             Console.WriteLine(title);
    53          }
    54       }
    55    }
    这个例子改自:c#3.0 高级编程
  • 相关阅读:
    MFC发送自定义消息
    NDIS LWF:NdisFSendNetBufferLists蓝屏(DRIVER_IRQL_NOT_EQUAL_OR_LESS)
    CreatFile打开驱动失败
    反向代理和正向代理区别(转)
    MFC对文件文件夹转移、删除、重命名、复制【转】
    解决 OnDropFiles 可能无响应的问题【转】
    HTML5
    Spring常见面试题总结
    Mybatis常见面试题总结
    MyBatis
  • 原文地址:https://www.cnblogs.com/SALIN/p/1116501.html
Copyright © 2011-2022 走看看