Dirección de memoria de un objeto en C #

Tengo una función escrita hace algún tiempo (para .NET 3.5), y ahora que he actualizado a 4.0

No puedo conseguir que funcione.

La función es:

public static class MemoryAddress
{
    public static string Get(object a)
    {
        GCHandle handle = GCHandle.Alloc(a, GCHandleType.Pinned);
        IntPtr pointer = GCHandle.ToIntPtr(handle);
        handle.Free();
        return "0x" + pointer.ToString("X");
    }
}

Ahora, cuando lo llamo - MemoryAddress.Get (auto nuevo ("azul"))

public class Car
{
    public string Color;
    public Car(string color)
    {
        Color = color;
    }
}

Me sale el error:

El objeto contiene datos no primitivos o no modificables.

¿Por qué ya no funciona?

¿Cómo puedo obtener ahora la dirección de memoria de los objetos administrados?

Respuestas a la pregunta(8)

Su respuesta a la pregunta