c#:为什么 GC 无法在我的代码中收集 Weakreference 的目标?

c# : why GC can't collect Weakreference's target in my code?

我写了这段代码:

            dog joe = new dog();
            WeakReference wr = new WeakReference(joe);
            if (wr.IsAlive)
            {
                Console.WriteLine("Yes,first time");
            }
            else
            {
                Console.WriteLine("No,first time");
            }

            GC.Collect();

            if (wr.IsAlive)
            {
                Console.WriteLine("Yes,second time");
            }
            else
            {
                Console.WriteLine("No,second time");
            }

我希望得到这样的结果: 是的,第一次 不,第二次

但似乎 GC 没有收集我的 WeakReference 的 target(joe)。 结果是: 是的,第一次 是的,第二次

我的问题是什么?..我是否误解了 WeakReferences?

您的代码是正确的。在没有调试器 (Shift+F5) 的情况下或直接从命令提示符编译为 Release 和 运行。有关解释,请参阅 Does garbage collection run during debug?