随机数字不起作用

Neo*_*mex 1 c#

可能的重复:
为什么我的随机数生成器在C#中不是随机的?
随机数发生器不按我计划的方式工作(C#)

您好,
我使用此函数(在类中)随机化数字:

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

public void Init()
{
    x = RandomNumber(0,500);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我稍后调用多个对象来执行此操作:

Obj[] obj = new Obj[64];
for( int i = 0 ; i < 64 ; i++ )
{
    obj[i] = new Obj();
}
...
for( int i = 0 ; i < 64 ; i++ )
{
    obj[i].Init();
}
Run Code Online (Sandbox Code Playgroud)

那么每个对象都有完全相同的'x'值.

这有什么不对?

Ode*_*ded 5

Random应该只创建一次并Next调用单个实例.

这是因为默认情况Random下由当前时间播种 - 如果在紧密循环中调用(与您一样),则种子将是相同的,并且伪随机算法的结果将大致相同.

如果您将代码更改为此类代码,您将获得更好的结果:

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

但是,这不是线程安全的.如果您尝试在多线程应用程序中使用它,则会遇到问题.对于线程安全版本,我建议阅读并关注Jon Skeet的这篇文章.