C# linqpad是否在查询之间重用随机种子

C# linqpad是否在查询之间重用随机种子,c#,random,linqpad,C#,Random,Linqpad,对于此代码: void Main() { var testRandom = new TestRandom(); testRandom.RandGen.Dump("Property1"); testRandom.RandGen.Dump("Property2"); TestRandom.rngStatic.Dump("Static field1"); TestRandom.rngStatic.Dump("Static field2"); testRa

对于此代码:

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

实例字段1370753000

实例字段2 1370753000


不可以。为什么LinqPad应该对随机数进行特殊处理,使其与其他应用程序不兼容

它将把每个查询编译成一个单独的程序集,并且只初始化静态变量一次。为了卸载程序集,它需要销毁包含该程序集的AppDomain

因此,它也可能为每个查询创建一个AppDomain,并在后续运行中重新使用该AppDomain。但是检查一下AppDomain.CurrentDomain,情况似乎不是这样。因此,我们有1个AppDomain和多个程序集


您可以通过放置
Console.WriteLine(“Test”)来确认这一点插入到代码中,以便需要重新编译。您将获得一个新编号。

linqpad是否在查询之间重用随机种子?不改变一些东西,然后检查。。。它只是重用已编译的程序集。。。它会一直加载em,直到需要重新编译为止,所以静态字段是相同的,看起来确实如此。谢谢!或者按Ctrl-Shift-F5。此外,您还可以向查询添加
Util.NewProcess=true
,以强制它在每次执行时创建一个新的流程。