相关疑难解决方法(0)

你如何获得foreach循环的当前迭代的索引?

是否有一些罕见的语言构造我没有遇到过(比如我最近学到的一些,有些是关于Stack Overflow)在C#中得到一个表示foreach循环当前迭代的值?

例如,我目前根据具体情况做这样的事情:

int i = 0;
foreach (Object o in collection)
{
    // ...
    i++;
}
Run Code Online (Sandbox Code Playgroud)

c# foreach

861
推荐指数
22
解决办法
81万
查看次数

列出<T> .ForEach with index

我正在尝试找到以下代码的LINQ等价物:

NameValueCollection nvc = new NameValueCollection();

List<BusinessLogic.Donation> donations = new List<BusinessLogic.Donation>();
donations.Add(new BusinessLogic.Donation(0, "", "", "");
donations.Add(new BusinessLogic.Donation(0, "", "", "");
donations.Add(new BusinessLogic.Donation(0, "", "", "");

for(var i = 0; i < donations.Count(); i++)
{
    // NOTE: item_number_ + i - I need to be able to do this
    nvc.Add("item_number_" + i, donations[i].AccountName);
}
Run Code Online (Sandbox Code Playgroud)

我希望我可以使用类似的东西:

NameValueCollection nvc = new NameValueCollection();

List<BusinessLogic.Donation> donations = new List<BusinessLogic.Donation>();
donations.Add(new BusinessLogic.Donation(0, "", "", "");
donations.Add(new BusinessLogic.Donation(0, "", "", "");
donations.Add(new BusinessLogic.Donation(0, "", "", ""); …
Run Code Online (Sandbox Code Playgroud)

c# linq generics

13
推荐指数
4
解决办法
4万
查看次数

foreach循环的当前索引

有没有办法知道当前的foreach运行,而不必:

Int32 i;
foreach
   i++;
Run Code Online (Sandbox Code Playgroud)

或者这是我得到的最佳选择?另外,我怎么知道该循环中的最大项目数?我想要做的是在表单上的foreach循环期间更新进度条.

这是我到目前为止:

    FileInfo[] directoryFiles = (new DirectoryInfo(folderBrowserDialog.SelectedPath)).GetFiles("*.*");
    foreach (FileInfo file in directoryFiles)
    {
        if ((file.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden || (file.Attributes & FileAttributes.System) == FileAttributes.System)
            continue;

        backgroundWorkerLoadDir.ReportProgress(i, file.Name);
        System.Threading.Thread.Sleep(10);
    }
Run Code Online (Sandbox Code Playgroud)

所以它应该如下,对吧?

   for (Int32 i = 0; i < DirectoryFiles.Length; i++)
   {
       if ((DirectoryFiles[i].Attributes & FileAttributes.Hidden) == FileAttributes.Hidden || (DirectoryFiles[i].Attributes & FileAttributes.System) == FileAttributes.System)
           continue;

       backgroundWorkerLoadDir.ReportProgress((i / DirectoryFiles.Length) * 100, DirectoryFiles[i].Name);
       System.Threading.Thread.Sleep(10);
   }
Run Code Online (Sandbox Code Playgroud)

c# indexing foreach loops

1
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×3

foreach ×2

generics ×1

indexing ×1

linq ×1

loops ×1