将列表数据传输到另一个列表,而不获取(集合)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));
}
}
}
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);