I'm trying to write some code that sets a property on a struct (important that it's a property on a struct) and it's failing:
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle();
PropertyInfo propertyInfo = typeof(System.Drawing.Rectangle).GetProperty("Height");
propertyInfo.SetValue(rectangle, 5, null);
The Height value (as reported by the debugger) never gets set to anything - it stays at the default value of 0.
I have done plenty of reflection on classes before and this has worked fine. Also, I know that when dealing with structs, you need to use FieldInfo.SetValueDirect if setting a field, but I don't know of an equivalent for PropertyInfo.
Ever heard of
SetValueDirect
? There's a reason they made it. :)There's other methods than the undocumented
__makeref
which you could use (seeSystem.TypedReference
) but they're more painful.The value of
rectangle
is being boxed - but then you're losing the boxed value, which is what's being modified. Try this: