Pri*_*ton 0 c# random winforms
如何在WinForms中使用C#生成6个随机但唯一的数字?
我有以下代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LottoGenerator
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Random rnd = new Random();
int randnum = rnd.Next(1, 49); // creates a number between 1 and 49
MessageBox.Show(Convert.ToString(randnum));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想确保生成的随机数不是重复的随机数.如何编写逻辑来检查生成的数字是否是另一个先前生成的数字?如果是,则生成一个新数字.
合理?
使用[1; 49]值生成列表,对其进行随机排列并逐个获取元素.
private List<int> list = null;
public Form1()
{
InitializeComponent();
Random rnd = new Random();
list = Enumerable.Range(1, 49).OrderBy(r => rnd.Next()).ToList();
}
private void button1_Click(object sender, EventArgs e)
{
if (list.Count == 0)
throw new InvalidOperationException();
int randnum = list[list.Count - 1];
list.RemoveAt(list.Count - 1);
MessageBox.Show(randnum.ToString());
}
Run Code Online (Sandbox Code Playgroud)
如果您只需要49个中的6个随机数,则可以添加.Take()方法调用.
list = Enumerable.Range(1, 49).OrderBy(r => rnd.Next()).Take(6).ToList();
Run Code Online (Sandbox Code Playgroud)