在C#中生成真正的随机数这么容易吗?

时间:2010-03-18 00:40:37

标签: c#

我发现此代码使用Google。

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

这真的是在C#中生成实数随机数吗?我打算在值1-10之间小规模生成。

由于

3 个答案:

答案 0 :(得分:11)

“真实”是什么意思?当然,它们是随机数,但可能不是加密安全随机数。但是对于大多数应用程序来说,Random.Next肯定是足够好的。

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

答案 1 :(得分:7)

如果您打算使用Random类(对大多数事情来说都很好),您不希望为每个调用创建一个新的Random Object。我建议创建一个包含类的静态成员:

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 :(得分:1)

您不必创建自己的包装已经存在的“Random”类的类。你可以打电话:

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

此外,关于“真实随机数”......它足够随机,满足全世界99.99%的需求。