0

所以我试图遍历我的应用程序列表框中的项目。列表框将允许您选择多个项目,我有一个方法与列表框中的每个项目相关联。每次循环工作时,我都会增加一个计数器变量。当我将 foreach 循环与下面的 switch 语句一起使用时,它会正确执行第一项,但随后会再次循环通过同一项。我知道我遗漏了一些东西,因为它应该转到列表框中的下一个项目而不是同一个项目。

      string reportname = lstbxReports.SelectedValue.ToString();
      int i = 0;
            foreach (var report in reportname)
            {
                switch (reportname)
                {
                    case "Overview":
                        {
                            if (i < 1)
                            {
                                PrintOverview(filename);
                            }
                            else if (i >= 1)
                            {
                                PrintOverviewAppend(filename);
                            }
                            break;
                        }
                    case "Sources":
                        {
                            if (i < 1)
                            {
                             PrintSource(filename);
                            }
                            else if (i >= 1) 
                            {
                             PrintSourceAppend(filename);
                            }
                            break;
                        }
                       }
                      i++

关于如何让 foreach 循环转到所选列表框中的下一项的任何想法或建议?

此外,这只是一个片段,因为我有大约 11 个案例项目要循环。

4

3 回答 3

5

您可能想要打开report,而不是reportname

于 2013-09-11T18:27:57.630 回答
2
foreach(string item in listBox.Items)
{
}

?

取决于您如何设置列表框的数据源(我假设这是 WinForm?)。如果您通过添加 .Items 或使用设计器创建它,那么这将起作用。但是,如果您使用过 .DataSource ,那么它将无法正常工作。

我个人有一个

List<string> list = SomeMethodWhereIMakeTheList(); 

并将其设置为:

listbox.DataSource = list;

那么我什至不必触摸 ListBox 来弄乱内容:

list.ForEach(...)
于 2013-09-11T18:37:58.743 回答
0

不要在 foreach 中执行打印逻辑。拆分数据然后打印这样的(注意我将reportname的名称更改为reportnames以表示项目列表

string reportnames = lstbxReports.SelectedValue.ToString();

var firstReport = reportnames.First(); // No error checking here, would use FirstOrDefault with null checks.

if (firstReport == "OverView")
   PrintOverview(filename);
else
   PrintSource(filename);

// Now print out the rest
reportnames.Skip(1)
           .ToList()
           .ForEach(rp =>
{
   if (rp == "OverView")
      PrintOverviewAppend(filename);
   else
      PrintSourceAppend(filename);
});
于 2013-09-11T18:43:33.030 回答