我有一种情况,我使用ArrayList来存储文件名称列表(完整文件路径)。当我将相同文件的多个项目添加到数组中时,然后使用ArrayList.IndexOf来查找索引(我正在向BackgroundWorker报告进度),它总是返回第一个项目的索引,因为它是通过文件名搜索的。这会导致进度条出现问题,即我正在处理3个文件,完成后,该栏只有1/3满了。C#使用ArrayList.IndexOf与多个相同的项目
下面是一些示例代码(我只是在这里添加项目,但在实际的代码,他们是从列表框中添加):
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'?通常应避免非通用集合。他们在那里是为了向后兼容,但过去10年编写的代码最好不要使用它们。 –
为什么你多次在同一个列表中有这个文件?它是否需要多次或单次处理? – weismat
你可以使用'for'循环并使用递增变量而不是'IndexOf'。 –