在C#中列出内部列表

本文关键字:内部 列表 | 更新日期: 2023-09-27 18:26:13

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

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

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

现在,让我们保存已经生成的数字,并清除数字列表,以便下次存储新的数字(只存储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

我错了吗?我必须做点别的吗?请帮忙,谢谢阅读。

在C#中列出内部列表

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

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

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

button2_Click函数中,在将其添加到Allnums之前,需要创建nums的副本。像这样的东西就可以了:

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

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

你必须创建一个新的列表,我建议其中一个解决方案:

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

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

在您的button2_Click方法中。