foreach 循环中的 switch 语句 - 未获得预期的结果

本文关键字:结果 循环 switch 语句 foreach | 更新日期: 2023-09-27 18:30:55

所以我正在尝试循环浏览应用程序中列表框中的项目。列表框将允许您选择多个项目,我有一个方法绑定到列表框中的每个项目。每次循环工作时,我都有一个计数器变量递增。当我将 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 个案例项目要循环。

foreach 循环中的 switch 语句 - 未获得预期的结果

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

foreach(string item in listBox.Items)
{
}

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

我个人会有一个

List<string> list = SomeMethodWhereIMakeTheList(); 

并将其设置为:

listbox.DataSource = list;

那么我什至不必触摸列表框来弄乱内容:

list.ForEach(...)

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

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);
});