我需要快速连续生成一系列随机数,但是我的应用程序结构意味着我不能重复使用相同的Random
对象。
所以我需要做的是,实质上:
using System;
namespace ConsoleApplication5 {
class Program {
static void Main() {
for (int i = 0; i < 100; i++)
Console.WriteLine(new Random().Next(int.MaxValue));
Console.ReadLine();
}
}
}
然而,这显然会返回相同生成数的重复,因为使用的种子基于系统时钟,并且循环正在如此快速地迭代。
请注意,要生成的随机数很小(约100左右),因此算法不好无关紧要。请注意,显然因为我无法保持对Random
对象的引用,所以我不能将最后生成的值用作下一次调用中的种子,因为它也不可用。
我每次如何获得不同的号码?
TIA
答案 0 :(得分:6)
更改为:
Random rand = new Random();
for (int i = 0; i < 100; i++)
Console.WriteLine(rand.Next(int.MaxValue));
答案 1 :(得分:5)
每次都不要随机new
。
var random = new Random();
for (int i = 0; i < 100; i++)
Console.WriteLine(random.Next(int.MaxValue));
答案 2 :(得分:5)
如果您确实无法创建持久性Random
类实例,则可以使用RandomNumberGenerator类获取一些随机字节,然后使用它们来计算随机数。当然,每次都必须创建一个新实例,并且该类比Random
慢一些,但它可以做你想要的。
答案 3 :(得分:4)
您可以使用静态变量:
using System;
namespace ConsoleApplication5
{
class Program
{
private static readonly Random _random = new Random();
static void Main()
{
for (int i = 0; i < 100; i++)
Console.WriteLine(_random.Next(int.MaxValue));
Console.ReadLine();
}
}
}
或使用本地随机变量,您将在for循环之外实例化并在内部重用。