C#垃圾收集器Ressurection NullRefException

C#垃圾收集器Ressurection NullRefException,c#,garbage-collection,C#,Garbage Collection,我有这个代码(作为一个非常好和友好的网站) 它创建一个值为50的A实例,打印它,通过将其唯一引用设置为null来连接创建的对象,激活其Dtor,并在保存到B后再次打印它 现在,奇怪的是,在调试时,当光标指向最后一行(B.IntA.Print())时,静态A成员的值为null,按F10后,我得到一个NullReferenceException,但静态A成员的值更改为它应该的值 有人能解释这种现象吗?你需要打电话给我。如果没有这个,你的析构函数实际上不会按顺序被调用 static void Main

我有这个代码(作为一个非常好和友好的网站)

它创建一个值为50的A实例,打印它,通过将其唯一引用设置为null来连接创建的对象,激活其Dtor,并在保存到B后再次打印它

现在,奇怪的是,在调试时,当光标指向最后一行(B.IntA.Print())时,静态A成员的值为null,按F10后,我得到一个NullReferenceException,但静态A成员的值更改为它应该的值

有人能解释这种现象吗?

你需要打电话给我。如果没有这个,你的析构函数实际上不会按顺序被调用

static void Main()
{
    // Create A instance and print its value
    A a = new A(50);
    a.Print();

    // Strand the A object (have nothing point to it)
    a = null;

    // Activate the garbage collector
    GC.Collect();

    // Add this to wait for the destructor to finish
    GC.WaitForPendingFinalizers();

    // Print A's value again
    B.IntA.Print();
}

谢谢,我只是假设提供此代码的网站能够正常工作。但我猜它是随机的,在某些条件下可能会起作用。@user779444讽刺的是,如果你能回答最后一个问题——复活的好处是什么,那么这种方法以前就不太可能起作用了?什么时候会有人想使用它?@user779444通常,您希望尽可能避免使用它。通常情况下,这不是你想故意使用的东西。这更多的是为了表明你能做到,但不一定是个好主意。
static void Main()
{
    // Create A instance and print its value
    A a = new A(50);
    a.Print();

    // Strand the A object (have nothing point to it)
    a = null;

    // Activate the garbage collector
    GC.Collect();

    // Add this to wait for the destructor to finish
    GC.WaitForPendingFinalizers();

    // Print A's value again
    B.IntA.Print();
}