2010-03-18 135 views
2

我使用Google找到此代码。在C#中生成真正的随机数字很简单吗?

private int RandomNumber(int min, int max) 
{ 
Random random = new Random(); 
return random.Next(min, max); 
} 

这真的是所有有生成真正的随机数在C#?我打算在值1-10之间产生一个小规模。

感谢

+3

你是什么意思'REAL'随机数字? C#的RNG(以及大多数语言的RNG)在设计/标准上是一个_pseudo_ RNG,但是通过给它提供相对随机的种子(从一天中的时钟开始),它会生成真正新颖的系列,并且[几乎]统一分配 – mjv 2010-03-18 00:47:44

回答

1

你不必让自己的类封装了已有的“随机”类。你可以叫:

int myNumber = (new Random()).Next(1, 10); 

此外,关于“真正的随机数” ......这是随机足够的需求,99.99%赫然出现在世界各地。

+0

这是随机的,因为它得到了......我记得在经典的ASP日子里,你需要爵士了一下吗? – 2010-03-18 00:43:42

+0

我知道一些随机类在几种语言中返回一个介于0和1之间的数字,但 – 2010-03-18 00:44:53

+0

是的,我曾经使用“关键字”RANDOMIZE ...当我从VB切换到VB.NET,然后切换到C#,我吓坏了不知道在哪里把代码:) – 2010-03-18 00:45:27

11

你是什么意思的“真实”?他们是随机数字,当然,虽然可能不是加密保护随机数字。但对于大多数应用来说,Random.Next绝对够用。

如果您想要加密安全的随机数,请检查System.Security.Cryptography.RandomNumberGenerator类。

7

如果您打算使用Random类(这对大多数情况来说都没问题),您不想为每个调用创建一个新的随机对象。我建议制作一个包含类的静态成员:

private static Random random = new Random(); 
private int RandomNumber(int min, int max) 
{ 
    return random.Next(min, max); 
} 

这是因为,默认情况下,Random类使用系统时间。

MSDN:然而,由于时钟具有有限的分辨率,使用参数构造紧密相继创建产生的随机数相同的序列随机数生成器来创建不同的随机的对象。 Link

对于更“真实”的随机数,您可以使用RNGCryptoServiceProvider(由Dean Harding提及)。

+2

当创建Random的多个实例时,对于与系统时钟接近相同的播种点的+1是近似连续的。 – razlebe 2010-03-18 01:08:00