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

问题是我的GetRandomRectangle函数生成的矩形总是相同的。
我正在使用System.Random生成矩形的坐标。

我意识到这是因为Random对象是使用默认构造函数创建的,因此具有相同的种子。我已经对其进行了修改,以便现在为每个矩形获取不同的种子,并且效果很好。

问题是-它如何决定“默认种子”?我注意到它似乎也不会随着时间而改变,使用种子2创建的矩形将始终具有相同的尺寸。

这可能是我可以使用Google的东西,但也很高兴听到你们的意见和信息。

谢谢 :)

最佳答案

默认种子是从系统时钟中获取的。

我猜想您的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
}

10-06 09:11