一尘不染

生成随机唯一值C#

c#

我搜索了一阵子,一直在努力寻找这个问题,我试图生成几个随机的,唯一的数字C#。我正在使用System.Random,并且正在使用DateTime.Now.Ticks种子:

public Random a = new Random(DateTime.Now.Ticks.GetHashCode());
private void NewNumber()
{
    MyNumber = a.Next(0, 10);
}

我会NewNumber()定期打电话,但问题是我经常打来电话。有人建议,因为我每次都声明随机数,所以不会产生随机数,因此我将声明放在函数之外。有什么建议或比使用更好的方法System.Random吗?谢谢


阅读 421

收藏
2020-05-19

共1个答案

一尘不染

我经常打电话给NewNumber(),但是问题是我经常得到重复的数字。

Random.Next不能保证数字是唯一的。另外,您的范围是从0到10,并且可能会得到重复的值。int检查是否不包含重复项后,您可以设置列表并在列表中插入随机数。就像是:

public Random a = new Random(); // replace from new Random(DateTime.Now.Ticks.GetHashCode());
                                // Since similar code is done in default constructor internally
public List<int> randomList = new List<int>();
int MyNumber = 0;
private void NewNumber()
{
    MyNumber = a.Next(0, 10);
    if (!randomList.Contains(MyNumber))
        randomList.Add(MyNumber);
}
2020-05-19