• 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 高级编程
  • 相关阅读:
    开源数据访问组件Smark.Data 1.8
    .NET应用加载容器KGlue
    TCP&UDP压力测试工具
    使用Beetle.Express简单构建高吞吐的TCP&UDP应用
    通过分析内存来优化.NET程序
    winsock I/O模型
    C++各大有名库的介绍
    深入研究 STL Deque 容器An InDepth Study of the STL Deque Container (By Nitron)
    C C++编程子资料库(小程序)
    VSS服务器安装配置(比较完整的一篇VSS服务器配置的文章)
  • 原文地址:https://www.cnblogs.com/SALIN/p/1116501.html
Copyright © 2020-2023  润新知