Diferença de ressurreição no uso do Object Initializer

Tenho este código:

Essencialmente, estou tentando demonstrar o uso do finalizador de c # e criar um objeto que não pode morrer, chamei de zumbi. Agora, normalmente essa demonstração funciona muito bem, mas hoje tentei usar o mesmo código com o inicializador de objetos em vez de apenas atribuir à propriedade (neste caso, o nome). Notei que há uma diferença. Ou seja, que o finalizador nunca é chamado, nem mesmo quando estou tentando o meu melhor para fazer o Garbage Collector funciona

Alguém poderia explicar a diferença ou eu encontrei um bug no compilador C #?

(Estou usando C # 4 no VS2010 SP1 no Win7x64)

Obrigado

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace Zombie
{
  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("Main thread: " + Thread.CurrentThread.ManagedThreadId);

              // case 1: this is where the problem is located.
      Zombie z = new Zombie { Name = "Guy" }; // object initializer syntax makes that the finalizer is not called.

              // case 2: this is not causing a problem. The finalizer gets called.
      //Zombie z = new Zombie();
      //z.Name = "Guy";

      WeakReference weakZombieGuyRef = new WeakReference(z, true);

      z = null;

      GC.GetTotalMemory(forceFullCollection: true);

      GC.Collect();

      while (true)
      {

        Console.ReadKey();
        if (weakZombieGuyRef.IsAlive)
        {
          Console.WriteLine("zombie guy still alive");
        }
        else
        {
          Console.WriteLine("Zombie guy died.. silver bullet anyone?");
        }

        Zombie.Instance = null;

        GC.AddMemoryPressure(12400000);
        GC.GetTotalMemory(forceFullCollection: true);

        GC.Collect();
      }


    }
  }

  public class Zombie
  {
    public string Name { get; set; }
    public  static Zombie Instance = null;

    ~Zombie()
    {
      Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
      Console.WriteLine("Finalizer called on zombie" + this.Name);
      lock (typeof(Zombie))
      {
        Instance = this;

        GC.ReRegisterForFinalize(this);
      }
    }
  }
}

questionAnswers(4)

yourAnswerToTheQuestion