C#中的随机数生成

Fio*_*ite 1 c# random

我一直在编写一些C#代码用于训练练习,其中我必须创建一个随机矩形数组.

问题是我的GetRandomRectangle函数生成的矩形始终是相同的.我System.Random用来生成矩形的坐标.

我意识到这是因为Random对象是使用默认构造函数创建的,因此具有相同的种子.我已修改它以便为每个矩形获取不同的种子,它工作正常.

问题是 - 它如何决定'默认种子'?我注意到它似乎也没有随着时间的推移而改变,用种子2创建的矩形将始终被赋予相同的尺寸.

这可能是我可以谷歌的东西,但很高兴听到你们的意见和信息.

谢谢 :)

Luk*_*keH 11

默认种子取自系统时钟.

我猜你的GetRandomRectangle方法是快速连续调用的,并且Random每次都会立即调用一个新的实例.执行此操作时,每个实例Random将从系统时钟中获取相同的种子,这就是您的方法每次创建相同的矩形的原因.

一种解决方案是创建一个实例Random并将其传递给您的方法:

Random rng = new Random();

Rectangle foo = GetRandomRectangle(rng);
Rectangle bar = GetRandomRectangle(rng);
Rectangle baz = GetRandomRectangle(rng);

// ...

public Rectangle GetRandomRectangle(Random rng)
{
    // create the rectangle using rng
}
Run Code Online (Sandbox Code Playgroud)