【发布时间】:2011-09-01 23:33:28
【问题描述】:
我有一个遍历数据库的 for each 循环来检查已标记为转换的文件。目前我有以下代码:
/* All files flagged for invidual conversion will be stored in here. */
ArrayList files = vc.getFilesForInvidualConversion();
foreach (FileInfoExtended file in files)
{
// As long as the status flag hasn't been changed it can continue.
if (abort == false)
{
if (vc.isFileInUse(file) == false)
{
// Converting the video file.
vc.convertVideoToFLV(file);
}
}
vc.getFilesForInvidualConversion();
}
在第一行中,您可以看到我用对象填充了一个 ArrayList,它将为每个对象运行一个对象。但是,在列表中的每个文件之后,我想检查可能需要转换的新文件。当我再次填充 ArrayList 时,for each 似乎没有注意到,它继续使用从第一行代码收到的原始文件。我更希望它更新“文件”-ArrayList,以便它也可以转换新文件。
这可能吗?
编辑:你为这个场景提供的所有工作,但我想添加一些东西。是否可以在循环期间从列表中删除文件?并使它不会转换那个?
编辑 2:这是我现在拥有的:
List<FileInfoExtended> files = vc.getFilesForInvidualConversion();
while (files.Count > 0)
{
if (abort == false)
{
if (vc.isFileInUse(files[0]))
{
vc.convertVideoToFLV(files[0]);
}
}
files = vc.getFilesForInvidualConversion();
}
它适用于两种情况(将文件添加到列表中以及从列表中删除文件时)。我不知道它是否在性能方面是一个好的解决方案,但现在它适合我的需求。除非我忽略了一些问题?
任何评论将不胜感激! 亲切的问候, 弗洛里斯
【问题讨论】:
-
尝试使用 for 而不是 foreach。 foreach 依赖于集合在其生命周期内不会发生变化。
-
我不知道,这清除了很多东西!谢谢你的信息。
标签: c# dynamic foreach arraylist