【发布时间】:2016-11-08 02:30:20
【问题描述】:
我有一种情况,我使用 ArrayList 来存储文件名列表(完整文件路径)。当我将同一文件的多个项目添加到数组中,然后使用 ArrayList.IndexOf 查找索引(我正在向 BackgroundWorker 报告进度)时,它始终返回第一项的索引,因为它是按文件名搜索的。这会导致进度条出现问题,即我正在处理 3 个文件,完成后,进度条只有 1/3。
这是一些示例代码(我只是在这里添加项目,但在实际代码中它们是从 ListBox 添加的):
ArrayList list = new ArrayList();
list.Add("C:\Test\TestFile1.txt");
list.Add("C:\Test\TestFile1.txt");
list.Add("C:\Test\TestFile1.txt");
var files = list;
foreach (string file in files)
backgroundWorker1.ReportProgress(files.IndexOf(file) + 1);
运行时,仅报告 1“百分比”的进度,因为 IndexOf 每次都在查找相同的文件。有没有办法解决?或者是否有人对获取索引(或每个项目的任何唯一标识符)的另一种方式提出建议?
【问题讨论】:
-
顺便说一句,您使用
ArrayList而不是List<string>有什么原因吗?通常应避免使用非泛型集合。它们在那里是为了向后兼容,但过去 10 年编写的代码最好不要使用它们。 -
为什么你的文件在同一个列表中多次出现?是否需要多次或单次处理?
-
您可以使用
for循环并使用递增变量而不是IndexOf。