首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用迭代器编写自定义IEnumerator <T>

在这个问答内容中,我们要求您创建一个自定义的IEnumerator <T>迭代器。IEnumerator <T>是一个接口,用于实现在一系列元素上进行迭代。在这个例子中,我们将创建一个自定义的IEnumerator <T>,用于迭代一个泛型列表。

以下是一个简单的自定义IEnumerator <T>的实现:

代码语言:csharp
复制
using System;
using System.Collections;
using System.Collections.Generic;

public class CustomEnumerator<T> : IEnumerator<T>
{
    private readonly List<T> _items;
    private int _currentIndex;

    public CustomEnumerator(List<T> items)
    {
        _items = items;
        _currentIndex = -1;
    }

    public bool MoveNext()
    {
        _currentIndex++;
        return _currentIndex < _items.Count;
    }

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

    public T Current
    {
        get
        {
            if (_currentIndex < 0 || _currentIndex >= _items.Count)
            {
                throw new InvalidOperationException("Enumerator is in an invalid state.");
            }

            return _items[_currentIndex];
        }
    }

    object IEnumerator.Current
    {
        get
        {
            return Current;
        }
    }

    public void Dispose()
    {
        // No disposal needed in this example.
    }
}

在这个实现中,我们首先定义了一个泛型列表_items,用于存储我们要迭代的元素。我们还定义了一个_currentIndex变量,用于跟踪当前迭代的位置。

MoveNext()方法将_currentIndex递增,并检查是否已经到达列表的末尾。如果是,则返回false,表示迭代已完成。否则,返回true,表示迭代可以继续。

Reset()方法将_currentIndex重置为-1,以便从头开始迭代。

Current属性返回当前迭代的元素。如果_currentIndex超出范围,则抛出InvalidOperationException异常。

最后,Dispose()方法在这个简单的实现中不需要,因为我们没有分配任何资源。

您可以使用此自定义IEnumerator <T>迭代器来迭代任何泛型列表。例如:

代码语言:csharp
复制
var items = new List<int> { 1, 2, 3, 4, 5 };
var enumerator = new CustomEnumerator<int>(items);

while (enumerator.MoveNext())
{
    Console.WriteLine(enumerator.Current);
}

这将输出:

代码语言:txt
复制
1
2
3
4
5

请注意,这个答案中没有提及任何云计算品牌商,因为这个问题是关于IEnumerator <T>迭代器的实现的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

迭代器模式

在面向对象编程里,迭代器模式是一种最简单也最常见的设计模式。它可以让用户透过特定的接口访问集合中的每一个元素而不用了解底层的实现。一般实现一个集合的方法有:数组,链表,哈希表等等,每种集合因为底层实现不同,遍历集合的方法也不同。对于数组或者列表,用户需要在对集合了解很清楚的前提下,可以自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦,而且暴露了集合类的内部表示给用户,数据也会不安全。而引入了迭代器方法后,用户用起来就简单的多了,并且更加安全。迭代器模式在客户访问类与集合类之间插入一个迭代器,这分离了聚合对象与其遍历行为,对客户也隐藏了其内部细节,且满足“单一职责原则”和“开闭原则”。所以,如果我们对各种集合的都实现了迭代器接口,就可以使存储数据和遍历数据的职责分离,并且让外部代码可以透明并统一地访问集合内部的数据,简化了遍历方式,还提供了良好的封装性,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用关心。

03

【深入浅出C#】章节 5: 高级面向对象编程:泛型编程和集合类型

高级面向对象编程是在基础面向对象编程的基础上进一步深入和拓展的一种编程范式。它强调封装、继承和多态的概念,并引入了泛型编程和集合类型等高级特性。高级面向对象编程提供了更灵活、可扩展和可复用的代码结构,能够帮助开发者构建更复杂、更高效的应用程序。高级面向对象编程中,泛型编程使得代码可以更加通用和灵活,能够处理不同类型的数据而无需重复编写相似的代码。集合类型则提供了丰富的数据结构和算法,使得数据的管理和操作更加便捷和高效。 通过深入理解和应用高级面向对象编程的概念和特性,开发者可以设计出更可靠、可维护和可扩展的软件系统。这种编程范式在现代软件开发中扮演着重要的角色,为开发者提供了强大的工具和思维方式,能够更好地满足不断变化的需求和挑战。

02

【愚公系列】2021年12月 二十三种设计模式(十六)-迭代器模式(Iterator Pattern)

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

03
领券