嵌套foreach循环,switch语句不增加大小写变量
本文关键字:增加 大小写 变量 语句 switch foreach 循环 嵌套 | 更新日期: 2023-09-27 18:12:15
我有这样的代码:
foreach(List<string> build in Builds)
{
int i = 0;
foreach(string item in build)
{
switch (i)
{
case 0:
Console.WriteLine("BuildID: " + item);
break;
case 1:
Console.WriteLine("UserID: " + item);
break;
case 2:
Console.WriteLine("Parameter 1: " + item);
break;
case 3:
Console.WriteLine("Parameter 2: " + item);
break;
case 4:
Console.WriteLine("Parameter 3: " + item);
break;
case 5:
Console.WriteLine("Parameter 4: " + item);
break;
}
i++;
Console.WriteLine(i);
}
}
,输出为:
BuildID: 1
1
BuildID: 1
1
BuildID: a
1
BuildID: b
1
BuildID: c
1
BuildID: d
1
列表中的项目正在递增并正确显示(1,1,a,b,c,d),但由于我不知道的原因,'i'计数器的递增在切换执行后被遗忘?我不明白?预期的输出应该是:
BuildID: 1
1
UserID: 1
2
Parameter 1: a
3
Parameter 2: b
4
Parameter 3: c
5
Parameter 4: d
6
我强烈怀疑您有多个列表,但是每个列表只有一个条目。
你在外循环中声明了i
,并将其初始化为0…所以你所表现出的行为正是你在那种情况下会得到的。
易于进一步诊断。只需添加更多的日志记录:
foreach(List<string> build in Builds)
{
Console.WriteLine("New build with {0} items", build.Count);
int i = 0;
我想你会看到:
New build with 1 items
BuildID: 1
1
New build with 1 items
BuildID: 1
1
New build with 1 items
BuildID: a
1
New build with 1 items
BuildID: b
1
New build with 1 items
BuildID: c
1
New build with 1 items
BuildID: d
1
假设这是您实际看到的,但不是您期望看到的,那么您需要返回并跟踪创建Builds
的位置。
private static readonly string[] BuildItemLabels =
{ "BuildID", "UserID", "Parameter1", "Parameter2", "Parameter3" , "Parameter4" };
...
foreach (List<string> build in Builds)
{
for (int i = 0; i < build.Count; i++)
{
Console.WriteLine("{0}: {1}", BuildItemLabels[i], build[i]);
}
}
(你应该考虑如果一个列表有超过6个项目会发生什么,注意…)
你的内部循环没有像预期的那样工作。你的输出只做BuildId
,意思是foreach(string item in build)
,每个构建中唯一的项目是BuildId
,你的开关打印它,然后你到达底部,增加i,打印它并返回到外部循环,它被设置为0。这就是为什么它总是1。问题出在循环之外。构建列表实际上并没有填充您期望它们包含的数据。
一般来说,这应该不是问题。
这个代码: var list1 = new List<int> {10, 20, 30};
var list2 = new List<int> {1, 2, 3};
int i = 0;
foreach (int integ in list1)
{
foreach (int integ2 in list2)
{
switch (i)
{
case 0:
Console.WriteLine(integ + integ2);
break;
case 1:
Console.WriteLine(integ + integ2);
break;
default:
Console.WriteLine(integ + integ2);
break;
}
}
i++;
Console.WriteLine(i);
}
结果:
11
12
13
1
21
22
23
2
31
32
33
3