所以我试图遍历应用程序中列表框中的项目。列表框将允许您选择多个项目,我有一个方法绑定到列表框中的每个项目。每次循环工作时我都会增加一个计数器变量。当我使用带有下面的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个案例项要循环。
答案 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);
});