列出C#中的列表内部

时间:2014-10-10 17:05:13

标签: c# list

这是我第一次使用收藏品而且我被困在这里,我做了一个测试项目来检查它,我遇到了一个问题,我不知道如何解决。

首先,我想要做的特别是列表(不能使用其他任何东西),是有一个包含整数列表的主列表,如下所示:

    List<List<int>> Allnums = new List<List<int>>();

我想在此处收集我想要添加到上一个列表中的数字:

    List<int> nums = new List<int>();

到目前为止,非常好。

我需要无限次地添加列表(nums)到我的主要列表(Allnums),所以我不能创建nums1,nums2,num3 ......等等

好的,让我们尝试在nums中添加一个随机数:(现在只有1个数字)

    Random rnd = new Random();
    private void button1_Click(object sender, EventArgs e)
    {
        nums.Add(rnd.Next(10));
    }

现在,让我们保存已生成的号码并清除号码列表,以便下次存储新的号码(仅限Lets store 4列表)。

    private void button2_Click(object sender, EventArgs e)
    {
        Allnums.Add(nums); //adds the minor list to the major list.
        nums.Clear(); //clears the minor list to accept new values.
    }

让我们用以下代码检查结果:

private void button3_Click(object sender, EventArgs e)
    {
        listBox1.Items.Clear();
        listBox1.Items.Add("Number of lists entered: " + Allnums.Count);
        foreach (List<int> numList in Allnums)
        {    
            listBox1.Items.Add("----------"); //separator to divide the lists
            foreach(int number in numList)
            {
                listBox1.Items.Add(number);
            }
        }
    }

我明白了:

Number of lists entered: 4 //OK
---------- //List1: nothing
---------- //List2: nothing
---------- //List3: nothing
---------- //List4: nothing

如您所见,生成的所有数字都不在那里。 但如果我删除'nums.Clear();'在'button2_Click'事件中,我明白了:

Number of lists entered: 4 //OK
---------- //List1
0
5
9
1
----------//List2
0
5
9
1
----------//List3
0
5
9
1
----------//List4
0
5
9
1
//All wrong

它存储了所有值,但方式错误,因为我想要实现的是:

Number of lists entered: 4
----------//List1
0
----------//List2
5
----------//List3
9
----------//List4
1

我错了吗?我还需要做别的吗?请帮助,谢谢你的阅读。

2 个答案:

答案 0 :(得分:1)

编辑:正如@crashmstr所说,List是一种引用类型。更好的解决方案是:

AllNums.Add(nums);
nums = new List<List<int>>();

=============================================== ======

button2_Click功能中,您需要先创建nums的副本,然后再将其添加到Allnums。像这样的东西可以解决这个问题:

var newNums = nums.ToArray().ToList();
Allnums.Add(newNums);

答案 1 :(得分:1)

执行Allnums.Add(nums);后,您有两个nums引用:一个在Allnums内,一个在nums内。当您将nums四次添加到Allnums时,您有5个引用指向同一个列表!

您必须创建新列表,我建议使用以下解决方案之一:

Allnums.Add(new List<int>(nums))

Allnums.Add(nums);
nums = new List<int>();

button2_Click方法中。