如何连续两个random给出不同的值?

use*_*479 5 c#

例如,如果我有一个班级:

public class Class
{
public Random r;

public Class()
{r= new Random()}
}
Run Code Online (Sandbox Code Playgroud)

然后创建它的两个实例:

Class a = new Class();
Class b = new Class();
Run Code Online (Sandbox Code Playgroud)

并且按顺序调用r,两者的r将给出相同的值.我读过这是因为Random的默认构造函数使用时间来提供"随机性",所以我想知道如何防止这种情况.提前致谢!

Wil*_*art 5

实现这一目标的一种方法是制作r static.

static表示只Random r存在一个,并且它将在该类的所有实例之间共享.

你的代码看起来像这样:

public class Class() { static Random r = new Random(); }

Class a = new Class();
Class b = new Class();
Run Code Online (Sandbox Code Playgroud)

如果您正在使用线程,则可以创建它[ThreadStatic](以便每个线程使用自己的Random类实例)

有关于如何在[ThreadStatic] 这里使用的信息- 我自己没有使用它,但它看起来非常酷和漂亮,并摆脱任何潜在的线程相关的困境.