【发布时间】:2020-03-30 14:21:26
【问题描述】:
对于此代码:
void Main()
{
var testRandom = new TestRandom();
testRandom.RandGen.Dump("Property1");
testRandom.RandGen.Dump("Property2");
TestRandom.rngStatic.Dump("Static field1");
TestRandom.rngStatic.Dump("Static field2");
testRandom.rngInstance.Dump("Instance field1");
testRandom.rngInstance.Dump("Instance field2");
}
// Define other methods, classes and namespaces here
class TestRandom
{
private static Random _rnd = new System.Random();
public static int rngStatic = _rnd.Next();
public int rngInstance = _rnd.Next();
public int RandGen => _rnd.Next();
}
我在 LinqPad 中得到以下结果:
物业1 167577867
物业2 2076433106
静态场1 1758463813
静态场2 1758463813
实例字段1 1875178546
实例字段2 1875178546
静态字段 1 和 2,实例字段 1 和 2 在同一查询中运行时显示相同的随机数。这与预期的一样,但是即使我重新运行查询,实例字段 1 和 2 将继续显示与之前运行相同的随机数。所以我怀疑种子是固定的,但无法确认。
第二次查询运行:
物业1 1860313679
物业2 1472007479
静态场1 1758463813
静态场2 1758463813
实例字段1 1370753000
实例字段2 1370753000
【问题讨论】:
-
linqpad 是否在查询之间重用随机种子? 不...更改某些内容并检查...它只是重用已编译的程序集...它会一直加载 em 直到重新编译需要,所以静态字段是相同的
-
似乎确实如此。谢谢!