如何解决我不能在代码中使用两次foreach循环,为什么?
我目前正在尝试学习C#,并且为从头开始实现Queue
提供了帮助。
当前,我正在尝试实现foreach
功能,以便可以打印出队列。
我在代码中两次使用foreach
循环时遇到问题,第二次使用它时,它不会打印任何内容。我设法看到Current
类中的Queue
方法在第二次使用foreach循环时没有得到使用(借助{{1}的print语句} position变量,第二次使用foreach不会显示任何内容)。
我非常感谢您理解我为什么不能在代码中两次使用foreach循环的任何帮助。如果我的代码还有其他可以改进的地方,也将不胜感激。
下面的 RunTest 类是我测试int
类的实现的地方。
Queue
这是我的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);
}
}
}
}
课:
Queue
解决方法
使用队列本身作为枚举器不是一个好主意-它将真正限制类的使用方式。例如,想象一下,如果您想检查队列中是否有重复项,则必须创建一个嵌套循环,这意味着两个同时的枚举器。根本就行不通,因为只有一个position
变量。
看看built-in classes是如何做到的。它们返回一个单独的枚举器类的新实例(例如,一个数组将创建一个SZArrayEnumerator
)。在您的情况下,您可能可以利用后备字段本身提供的枚举数,如下所示:
public IEnumerator GetEnumerator()
{
ToArray();
return storeElements.GetEnumerator();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。