我有一个Webstream reader<WaveStream> list
,我正在使用foreach循环处理WaveStream,如下所述
foreach (WaveStream ws in readers)
ws.Dispose();
但是reader<WaveStream> list
在foreach循环处理对象的同时被另一种方法修改
因此,我们得到了未处理的异常集合被另一种方法修改,并且我们的应用程序崩溃了
能否请您提供一些解释或解释链接,如下所述,在使用for循环后我们的崩溃问题如何解决?
for (int i = 0; i <= readers.ToArray().Length - 1; i++)
{
readers[i].Dispose();
}
我无法理解for循环并readers.ToArray()
解决了崩溃问题。
答案 0 :(得分:0)
如果List<T>
在foreach
中被修改时,您将得到一个异常,因为基础集合已更改。因此,在您的情况下,要么是另一个线程在您遍历列表时更改了列表,要么是处理流的实际操作是在修改列表。通过调用ToArray
,您将创建一个新数组,该数组是原始列表的副本。没有其他人可以访问该数组,因此当您遍历该数组时,其内容不会更改。