c# - 如何为自定义队列实现 <IEnumerable>?

标签 c#

我有一个通过链表实现的自定义队列类,但我不知道如何为非数组的东西实现 IEnumerable。

使用 Dequeue() 很容易实现它,但我不希望枚举改变我的集合。

这是我的 DQueue 类代码:

class DQueue<Item> : IEnumerable<Item>
    {
        private Node<Item> startNode;
        private Node<Item> lastNode;
        private int _size;

        public DQueue()
        {
            _size = 0;
        }

        public void Enqueue(Item item)
        {
            _size++;
            if (startNode == null) {
                startNode = new Node<Item>();
                startNode.data = item;
                lastNode = startNode;
            } else {
                Node<Item> temp = new Node<Item>();
                temp.data = item;
                lastNode.next = temp;
                lastNode = temp;
            }
        }

        public Item Dequeue()
        {
            Item temp = startNode.data;
            startNode = startNode.next;
            _size--;
            return temp;
        }

        public bool IsEmpty()
        {
            return startNode == null;
        }

        public int Size()
        {
            return _size;
        }


        private class Node<InnerItem>
        {
            public InnerItem data;
            public Node<InnerItem> next;

            public Node()
            {
                next = null;
            }
        }

        // IEnumerable
        public IEnumerator<Item> GetEnumerator()
        {
            Node<Item> current;

            for (int i = 0; i < _size; i++) {
                //yield return values[i];
            }
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

最佳答案

建议下一个解决方案,从起始节点开始迭代:

public IEnumerator<Item> GetEnumerator()
        {
                for (Node<Item> item = startNode; item != null; item = item.next)
                {
                    yield return item.data;
                }
        }

关于c# - 如何为自定义队列实现 <IEnumerable>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35897817/

相关文章:

C#,一维环绕数组

c# - Docker 仅针对 http 端口返回响应

c# - 如何获取 C# 中当前运行时的信息?

c# - 在 IIS 7 中托管 Asp.Net Core

c# - 澄清 C# 字典上的读写

c# - 将代码从 vb6 转换为 c#-System.Variant.Marshal Helper Convert Object To Variant'

c# - 在 XAML 中的 View 中绑定(bind)多个 ViewModel

c# - 来自不同类的 NUnit DataSource

c# - "mono_add_internal_call"是否可以仅使用 CLR 托管?

c# - .NET Web 应用程序中的 native 依赖项未加载