LINQPad中静态init的意外行为

时间:2017-03-04 14:53:07

标签: c# linqpad

我运行以下LINQPad的C#程序两次:

void Main()
{
    new Bar();
}

class Bar
{
    static DateTime staticInitTime = DateTime.Now;
    DateTime initTime = DateTime.Now;

    public Bar()
    {
        staticInitTime.Dump("staticInitTime");
        initTime.Dump("initTime");
    }
}

虽然我发现第一次运行的结果没有问题:

staticInitTime
3/4/2017 11:45:28 PM 

initTime
3/4/2017 11:45:28 PM 

我无法理解第二次运行的结果,仅在第一次运行后几秒钟:

staticInitTime
3/4/2017 11:45:28 PM 

initTime
3/4/2017 11:45:40 PM

具体来说:为什么staticInitTime会在运行之间保持它的价值? 只有当我重新构建代码时,staticInitTime的值才会被初始化,但仅适用于第一次运行。

1 个答案:

答案 0 :(得分:2)

那是因为Linqpad很聪明。默认情况下,每次运行查询时都不会构建新的AppDomain。因此,在重建之前,将保留所有静态初始化。您可以在高级首选项中更改此行为:

enter image description here

顺便说一句,完全偏离主题:Linqpad摇滚!