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