微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我不能在代码中使用两次foreach循环,为什么?

如何解决我不能在代码中使用两次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 举报,一经查实,本站将立刻删除。