LINQPad 中静态初始化的意外行为

Unexpected behavior for static init in 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 的值才会被初始化,但仅针对第一个 运行.

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

顺便说一句,完全跑题了:Linqpad 棒极了!