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

JL.*_*JL. 2 c#

我发现此代码使用Google.

private int RandomNumber(int min, int max)
{
Random random = new Random();
return random.Next(min, max);
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Dea*_*ing 11

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

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


Ran*_*ric 7

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

private static Random random = new Random();
private int RandomNumber(int min, int max)
{
    return random.Next(min, max);
}
Run Code Online (Sandbox Code Playgroud)

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

MSDN:但是,由于时钟具有有限的分辨率,因此使用无参数构造函数以紧密连续的方式创建不同的随机对象会创建随机数生成器,从而生成相同的随机数序列.链接

对于更"真实"的随机数,您可以使用RNGCryptoServiceProvider(Dean Harding提到).

  • 当创建多个Random实例时,从系统时钟接近相同种子的点的+1是紧密连续的. (2认同)