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

时间:2014-10-08 03:13:17

标签: c# list arraylist

我正在尝试生成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));
    }
}

}

2 个答案:

答案 0 :(得分:0)

以下代码是否解决了您的问题?请告诉我。感谢。

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

答案 1 :(得分:0)

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