我有一个遍历数据库的 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 似乎没有注意到,它继续使用从第一行代码接收到的原始文件。我宁愿希望它更新"file"-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();
}
它在两种情况下都有效(将文件添加到列表时和从列表中删除文件时)。我不知道它在性能方面是否是一个好的解决方案,但现在它适合我的需要。除非我忽略了一些问题?
任何评论将不胜感激! 亲切的问候, 弗洛里斯
最佳答案
我建议使用其他一些集合而不是 ArrayList
.例如Stack<T>
.然后这样写:
while (stack.Any())
{
var item = stack.Pop();
// convert item
}
// All items were converted
您可以随时stack.Push()
新项目。
P.S.:使用非通用 ArrayList
有什么意义吗? ?
关于c# - 每个都有一个动态列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6128549/