【问题标题】:transfer list data to another list without getting (collection) C#将列表数据传输到另一个列表而不获取(收集)C#
【发布时间】:2014-10-08 03:13:17
【问题描述】:

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

}

【问题讨论】:

  • 为什么不直接将号码添加到第二个列表中?
  • 我必须取出一个包含 6 个项目的列表,然后将它们显示在新列表的一行中

标签: c# list arraylist


【解决方案1】:

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&lt;int&gt;,否则您可以删除该代码并将随机生成的数字直接添加到lst_display.Items,使用我的第一个示例。


看到你的评论后更新:

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

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

所以在你的 while 循环完成后,你可以这样调用:

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

【讨论】:

  • 如果我想要说 5 行,每行 6 个随机数,我该怎么做?
【解决方案2】:

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

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

【讨论】:

  • 似乎可以接受代码,但我的表单上没有输出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多