-1

我有这个代码:

                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
4

3 回答 3

4

我强烈怀疑您有多个列表,但每个列表只有一个条目。

您在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 个项目会发生什么,请注意......)

于 2013-05-03T18:24:44.237 回答
2

那么你的内部循环没有按预期工作。你的输出只是BuildId意味着foreach(string item in build)每个构建中唯一的项目是BuildId,你的开关打印出来,然后你到达底部,增加 i,打印它并返回设置为 0 的外循环。这就是为什么它总是 1 . 问题出在循环之外。构建列表实际上并没有填充您期望它们包含的数据。

于 2013-05-03T18:25:01.037 回答
0

一般来说,这应该不是问题。

这段代码:

        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
于 2013-05-03T18:32:56.220 回答