¿Alguna forma de evitar la optimización de la propiedad en línea en C #?

Así que tengo una clase PropertyBag que está destinada a implementar INotifyPropertyChanged. Para que este código funcione de la manera más limpia posible y para evitar errores de usuario, estoy usando la pila para obtener el nombre de la propiedad. Vea, si el nombre de la propiedad no coincide exactamente con la propiedad real, entonces tendrá una falla y estoy tratando de protegerme de eso.

Entonces, aquí hay un ejemplo de uso de la clase:

public class MyData : PropertyBag
{
    public MyData()
    {
        Foo = -1;
    }

    public int Foo
    {
        get { return GetProperty<int>(); }
        set { SetProperty(value); }
    }
}

El código importante para el PropertyBag base está aquí:

public abstract class PropertyBag : INotifyPropertyChanged
{
    protected T GetProperty<T>()
    {
        string propertyName = PropertyName((new StackTrace()).GetFrame(1));
        if (propertyName == null)
            throw new ArgumentException("GetProperty must be called from a property");

        return GetValue<T>(propertyName);
    }

    protected void SetProperty<T>(T value)
    {
        string propertyName = PropertyName((new StackTrace()).GetFrame(1));
        if (propertyName == null)
            throw new ArgumentException("SetProperty must be called from a property");

        SetValue(propertyName, value);
    }

    private static string PropertyName(StackFrame frame)
    {
        if (frame == null) return null;
        if (!frame.GetMethod().Name.StartsWith("get_") &&
           !frame.GetMethod().Name.StartsWith("set_"))
            return null;

        return frame.GetMethod().Name.Substring(4);
    }
}

Así que ahora que has visto mi código, puedo decirte el problema ... En algunos casos, bajo la versión de compilación, el configurador "Foo" en el constructor "MyData" parece estar optimizado para alinearse como SetProperty (-1) . Desafortunadamente, esta optimización en línea falla mi método SetProperty porque ya no lo llamo desde una propiedad. FALLAR. Parece que no puedo confiar en StackTrace de esta manera.

¿Puede alguien A: encontrar una mejor manera de hacer esto pero aún así evitar pasar "Foo" a GetProperty y SetProperty?
B: ¿Encuentra una manera de decirle al compilador que no optimice en este caso?

Respuestas a la pregunta(5)

Su respuesta a la pregunta