泛型迭代的例子

对集合 (通常是数组或列表) 执行的最常见的操作之一就是遍历(迭代)它的所有元素。为此,最简单的办法就是使用 foreach 语句。在C#1中,为了使用 foreach,集合要么必须实现

System.Collections.IEnumerable 接口,要么必须有一个类似于返回一个类型的 GetEnumerator() 方法,而且该类型含有一个恰当的 MoveNext() 方法和 Current 属性。

C#2 的改进。foreach 语句的规则得到了扩展,现在还可以使用 system.Collections.Generic.IEnumerable<T> 接口及其搭档 IEnumerator<T>。 它们是旧的枚举接口的泛型等价物,而且应该优先使用它们,而不是使用非泛型的版本。

在少数情况下,当需要为自己的某个类型实现迭代时,你会发现由于 IEnumerable<T> 扩展了旧的 IEnumerable 接口,所以需要实现两个不同的方法:

  • IEnumerator<T> GetEnumerator();
  • IEnumerator GetEnumerator();

 实现 IEnumerable<int>

class CountingEnumerable : IEnumerable<int>
{
    public IEnumerator<int> GetEnumerator()     // 隐式实现 IEnumerator<int>
    {
        return new CountingEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()     // 显式实现 IEnumerable
    {
        return GetEnumerator();
    }
}

 实现 IEnumerator<int>

class CountingEnumerator : IEnumerator<int>
{
    int current = -1;

    public bool MoveNext()
    {
        current++;
        return current < 10;
    }

    public int Current { get { return current; } }      // 隐式实现 IEnumerator<int>.Current

    object IEnumerator.Current { get { return current; } }      // 显式实现 IEnumerator.Current

    public void Reset()
    {
        current = -1;
    }

    public void Dispose() { }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值