我需要快速连续生成一系列随机数,但是我的应用程序的结构意味着我不能重用同一个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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这显然会返回相同生成数的重复,因为使用的种子基于系统时钟并且循环正在如此快速地迭代.
注意,要生成的随机数的数量很少(约100左右),因此如果算法很差则无关紧要.请注意,显然因为我无法保持对该Random对象的引用,所以我不能将最后生成的值用作下一次调用中的种子,因为它也不可用.
我怎样才能每次获得不同的号码?
TIA
改成:
Random rand = new Random();
for (int i = 0; i < 100; i++)
Console.WriteLine(rand.Next(int.MaxValue));
Run Code Online (Sandbox Code Playgroud)
new每次都不要随意.
var random = new Random();
for (int i = 0; i < 100; i++)
Console.WriteLine(random.Next(int.MaxValue));
Run Code Online (Sandbox Code Playgroud)
如果您确实无法创建持久化Random类实例,则可以使用RandomNumberGenerator类获取一些随机字节,然后使用它们来计算随机数.当然,你每次都必须创建一个新实例,而且这个类有点慢Random,但是它会做你要求的.