【发布时间】:2012-12-30 01:11:05
【问题描述】:
首先,在我的代码开头,我声明了一个 ArrayList public ArrayList ArrivalsInApp = new ArrayList();。然后,很久以后,我从 XML 文件下载一些数据。对于每个名为“flight”的 XmlNode,我正在创建一个面板。
在创建面板时,我将其名称添加到ArrivalsInApp ArrayList。面板的生成是一种方法。该方法有几个 foreach 循环和 IF 条件。从技术上讲,它决定是否应该创建 Panel(如果它在 XML 中而不是在应用程序中)、更新(在两者中)或删除(在应用程序中但不在 XML 中)。
在该方法中,我以 XML 格式获取所有航班的名称,并保存到 ArrayList 中。现在使用 foreach,我检查应用程序中的所有航班(因此在 ArrivalsInApp ArrayList 中)是否也在 XML 中。我使用以下代码执行此操作:
foreach (string y in ArrivalsInApp)
{
if (XmlArrivals.Contains(y) == false)
{
*code*
}
}
在 form1_load 上调用“决定”方法,并且每 30 秒使用一个 Timer。当计时器达到指定值时,我重新加载 XML,然后调用该方法。但是,我收到了一个 InvalidOperationException,其中包含“集合已修改;枚举操作可能无法执行”的注释。在foreach (string y in ArrivalsInApp) 行。我完全绝望了,我不知道是什么原因造成的。
如果我运行 .exe 文件(如果我只是调试它,在计时器达到该值后,程序关闭并显示此错误)会发生什么,无论是否应该更新或删除面板都会被删除,并弹出未处理的异常错误。 对不起,如果解释有点混乱。如果有人希望我发布整个源文件(可能是整个项目),请告诉我。但是,由于它现在有大约 1800 行代码,因此需要大量解释。
【问题讨论】:
-
""收藏已修改;枚举操作可能不会执行。" " - 在迭代之前获取列表的副本,或者向后迭代,检查集合的最后一个成员...
-
@MitchWheat 我不明白,你的意思是像在foreach之前创建一个具有相同内容的新ArrayList,并在foreach中使用这个ArrayList?
-
数组列表?您使用的是哪个版本的 .NET?
-
.NET 4.0,是的,我听说过 List
,但我什至不确定它是什么,不说如何使用它,如果您因此而问的话。
标签: c# arraylist foreach unhandled-exception invalidoperationexception