原文:http://forum.byr.edu.cn/wForum/disparticle.php?boardName=dotNET&ID=980
随机函数生成的随机数总是一个值,而单步跟踪的时候又能够出现随机的效果,一直很奇怪。代码大致如下所示:
for(int i=0;i<10;i++)
{
Random random=new Random();
int index=random.Next(10);
}
.net的随机函数与随机数种子seed有关,也就是传给Random构造函数的参数。如上面代码所示,在构造Random 时采用了默认构造函数,系统就会使用当前系统时间作为随机数种子,然而计算机运行上述代码非常的快,系统时间没有发生变化,也就是说随机数种子不会变,这 样出来得随机数就是一样的了。
解决这个问题的方法就是,每次循环要给Random构造函数传递一个不同的种子。网上给的比较简单的方法是,每次产生一个新的Guid对象,然后用它的散列值(每个Guid对象的散列值是不同的)作为构造函数的参数,如下所示:
for(int i=0;i<10;i++)
{
Random random=new Random(Guid.NewGuid().GetHashCode());
int index=random.Next(10);
}