在foreach循环中切换语句 - 没有得到预期的结果

时间:2013-09-11 18:26:05

标签: c# foreach switch-statement

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

      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个案例项要循环。

3 个答案:

答案 0 :(得分:5)

您可能想要启用report,而不是reportname

答案 1 :(得分:2)

foreach(string item in listBox.Items)
{
}

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

我个人有一个

List<string> list = SomeMethodWhereIMakeTheList(); 

并将其设置为:

listbox.DataSource = list;

然后我甚至不必触摸ListBox来搞乱内容:

list.ForEach(...)

答案 2 :(得分:0)

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

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