如果数字与前一个匹配,则生成一个随机数

我想创建一个随机数字,前面有一个文本,我不希望系统显示两次数字。 所以,这就是我做的方式:

Random _rand = new Random(); private void RandomNumberGenerator() { int random = _rand.Next(10000); string text = "TP0" + random; if (random.Equals(random)) { _rand.Next(); } else { random = _rand.Next(10000); } MessageBox.Show(text); } 

我没有得到任何显示的数字两次(但我不太确定,因为我只是关闭程序,直到它显示数字5次(所有这些都不是相同的数字)。

从上面的代码可以有机会两次显示数字吗?

谢谢。

编辑以摆脱魔法数字并确保理智。

  Random _rand = new Random(); HashSet _taken = new HashSet(); object _syncRoot = new object(); private int RandomNumberGenerator() { lock (_syncRoot) { const int MAX_NUMBER = 10000; if (_taken.Count == MAX_NUMBER) { throw new Exception("All possible numbers are already generated."); } int random = _rand.Next(MAX_NUMBER); while (_taken.Contains(random)) { random = (random + 1) % MAX_NUMBER; } _taken.Add(random); return random; } } 

Soner Gonul是正确的,随机的。我认为,平等(随机)总是如此。 您可以(大致)通过使用另一个int变量来解决它,这将变成生成的最后一个数字, 然后当函数进入它的下一个循环时,它将引用新的随机数变量与存储在第二个变量中的变量相对应,是以前的随机数。 这是一种做法,如果你不明白,我可以尝试在一分钟内更明确一点