C# 我能';我的代码中没有两次使用foreach循环,为什么?

C# 我能';我的代码中没有两次使用foreach循环,为什么?,c#,foreach,queue,C#,Foreach,Queue,我目前正在尝试学习C#,并尝试从头开始实现Queue 目前,我正在尝试实现foreach功能,以便打印出队列。 当我在代码中两次使用foreach循环时,我遇到了一个问题,第二次使用时,它不会打印任何内容。在我第二次使用foreach循环时(借助于intposition变量的print语句,该变量在第二次使用foreach时不会打印出任何内容),我已经设法看到Queue类中的Current方法没有被使用 我非常感谢有人帮助我理解为什么我不能在代码中两次使用foreach循环。如果我的代码还有什么

我目前正在尝试学习C#,并尝试从头开始实现
Queue

目前,我正在尝试实现
foreach
功能,以便打印出队列。 当我在代码中两次使用
foreach
循环时,我遇到了一个问题,第二次使用时,它不会打印任何内容。在我第二次使用foreach循环时(借助于
int
position变量的print语句,该变量在第二次使用foreach时不会打印出任何内容),我已经设法看到
Queue
类中的
Current
方法没有被使用

我非常感谢有人帮助我理解为什么我不能在代码中两次使用foreach循环。如果我的代码还有什么可以改进的地方,我也非常感谢

下面的运行测试类是我测试
队列
类实现的地方

namespace RunTest
{
    class RunTest
    {
        public static void Main(string[] args){

            Queue<string> queueOfStrings = new Queue<string>();

            queueOfStrings.Enqueue("Dog");
            queueOfStrings.Enqueue("Cat");
            queueOfStrings.Enqueue("Mouse");
            queueOfStrings.Enqueue("Bird");

            System.Console.WriteLine("Foreach: \n");
            foreach(string item in queueOfStrings){
                System.Console.WriteLine(item);
            }
            System.Console.WriteLine("\n");

            System.Console.WriteLine("Peek: "+queueOfStrings.Peek());
            System.Console.WriteLine("Dequeue : "+queueOfStrings.Dequeue());
            System.Console.WriteLine("Peek: "+queueOfStrings.Peek());

            System.Console.WriteLine("Foreach: ");
            foreach(string item2 in queueOfStrings){
                System.Console.WriteLine(item2);
            }


        }
    }
}

将队列本身用作枚举器并不是一个好主意——它将真正限制类的使用方式。想象一下,例如,如果要检查队列中是否有重复项,则必须创建一个嵌套循环,这意味着同时有两个枚举数。它根本不起作用,因为只有一个
位置
变量

看看你是怎么做到的。它们返回一个单独枚举器类的新实例(例如,数组将创建一个
SZArrayEnumerator
)。在您的情况下,您可能可以利用支持字段本身提供的枚举器,如下所示:

public IEnumerator GetEnumerator()
{
    ToArray();
    return storeElements.GetEnumerator();
}

调试代码比您想象的要容易。它还将帮助您了解代码如何执行,这将帮助您编写更好的代码。
public IEnumerator GetEnumerator()
{
    ToArray();
    return storeElements.GetEnumerator();
}