Основным принципом для этой проблемы является следующее:
List<string> numbers = new List<string>() { "one", "two", "three" };
foreach (var num in numbers.Select((value, index) => new { value, index }))
{
Console.WriteLine("Value: {0}, Index: {1}", num.value, num.index);
}
Это создаст новый анонимный тип в цикле foreach, содержащий value
и index
в переменной num.
Итак, чтобы решить проблему, указанную в ОП:
FileInfo[] directoryFiles = (new DirectoryInfo(folderBrowserDialog.SelectedPath)).GetFiles("*.*");
foreach (FileInfo file in directoryFiles.Select((value, index) => new {value, index}))
{
if ((file.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden
||
(file.Attributes & FileAttributes.System) == FileAttributes.System)
continue;
int progress = (file.index / DirectoryFiles.Length) * 100;
backgroundWorkerLoadDir.ReportProgress(progress, file.value.Name);
System.Threading.Thread.Sleep(10);
}