将列表数据传输到另一个列表,而不获取(集合)C#

本文关键字:列表 获取 集合 数据传输 另一个 | 更新日期: 2023-09-27 18:25:56

我正在尝试生成6个随机数并将它们存储在一个列表中,然后在另一个列表显示这些列表项到目前为止我有

        Random random_generator = new Random(DateTime.Now.Millisecond);
        int random_numbers;
        List<int> lst_numbers = new List<int>();
        lst_display.Items.Clear();
        while (lst_numbers.Count < 6)
        {
            random_numbers = random_generator.Next(1,45);
            if (!lst_numbers.Contains(random_numbers))
            {
                lst_numbers.Add(random_numbers);
            }
            else
            {
            }
            lst_display.Items.Add(lst_numbers);

尽管它以(集合)而不是存储的实际数字结束

这是最后的工作代码

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void btn_start_Click(object sender, EventArgs e)
    {
        Random random_generator = new Random(DateTime.Now.Millisecond);
        int random_numbers;
        List<int> lst_numbers = new List<int>();
        lst_display.Items.Clear();
        while (lst_numbers.Count < 6)
        {
            random_numbers = random_generator.Next(1, 45);
            if (!lst_numbers.Contains(random_numbers))
            {
                lst_numbers.Add(random_numbers);
            }
            else
            {
            }
        }
        lst_display.Items.Add(string.Join(",", lst_numbers));
    }
}

}

将列表数据传输到另一个列表,而不获取(集合)C#

while循环中的这一行(缺少一个右大括号)是罪魁祸首:

lst_display.Items.Add(lst_numbers);

您要将整个集合添加到lst_display.Items,并且每次迭代都要执行一次。

要么将这行代码保留在循环中,但只添加当前随机生成的数字:

lst_display.Items.Add(random_numbers);

或者,在while循环完成后,将其移动到循环之外,并添加一次集合。Items属性是一个ObjectCollection,因此如果采用以下路径,则需要强制转换为对象数组:

while (...)
{
    ...
}
lst_display.Items.AddRange(lst_numbers.Cast<object>().ToArray());

除非您稍后使用List<int>,否则您可以删除该代码,并使用我的第一个示例将随机生成的数字直接添加到lst_display.Items中。


更新,在看到您的评论后:

"我必须列出6个项目,然后将它们显示在新列表中的一行"

如果您想在ListBox中的一行中显示它们,那么有一个名为String.Join的方法可以获取一个集合并将其展平。

因此,在while循环完成后,您可以称之为:

lst_display.Items.Add(string.Join(",", lst_numbers));

下面的代码能解决您的问题吗?请告诉我。谢谢

            Random random_generator = new Random(DateTime.Now.Millisecond);
            int random_numbers;
            List<int> lst_numbers = new List<int>();
            List<int> lst_display = new List<int>();
            while (lst_numbers.Count < 6)
            {
                random_numbers = random_generator.Next(1, 45);
                if (!lst_numbers.Contains(random_numbers))
                {
                    lst_numbers.Add(random_numbers);
                }
            };
            lst_display.AddRange(lst_numbers);