2015-11-13 86 views
1

我想运行一个测试生成并通过一些测试输出到foreach循环,但每个其他时间我尝试运行它停止的方法,并在foreach循环的in它给出了一个例外foreach Collection已修改;枚举操作可能不会执行

System.InvalidOperationException mscorlib.dll中发生

,然后异常被捕获在try catch并给出错误

收藏已修改;枚举操作可能无法执行

我不完全确定为什么会产生这个错误!

+0

如何添加一些代码? –

回答

5

您不允许修改循环内的循环列表。因此,创建的是同样的事情,一个新的列表:

var predcostssubjForLoop = predcostssubj.ToList(); 

,然后做一个

foreach (PredCost pc in predcostssubjForLoop) 

但继续修改predcostssubj循环

作为一个方面说明里面,我建议你看看该书Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin

+0

我不确定我是否确定遵守,可否提出更具建设性的方式?但如果我正确思考,我需要创建一个新的循环,这是从原始循环传递的信息? 然后我可以从那里修改信息? 至于我刚刚买的代码完整的书,我正在慢慢地通过这个方式,但谢谢。 – user3047041

+0

是的,当您循环访问列表时,您无法更改'foreach'中的列表内容。由于这会导致列表在foreach中发生变化,并且foreach不知道如何处理该列表,所以如果添加到列表的开头,那么foreach应该返回到开始,以便它实际上遍历该列表中的每个事物......它不知道该怎么做,因此失败。基本上,不要修改你正在循环播放的列表...不知道我能做出多少“有建设性的...” –

+0

让我试着让它具有建设性:这是一个常见的错误,甚至对于非常有经验的程序员来说,尝试检查他们需要修改的对象。我们都这样做。我不认为塞尔吉忽略了这一点。 深夜编码,错过了足够的咖啡,几年后你会在书中发现每一个错误。 :) 我只是做了它,不得不看看正确的思维方式。我一直在编写10年,只是对自己轻笑,想:“当然......很明显,我无法检查,然后修改我正在测试的内容。” – user1585204

相关问题