He estado trabajando con nuestro amigo @jacano, conocido por todos como ReflectorMan, y nos ha sido necesario modificar por reflexión el valor de una estructura (struct).
De todas las formas que encontramos de hacerlo, vimos que la más sensata es:
object boxedObject = myStruct; …. Info.SetValue(boxedObject, structValue); … myStruct = (MyStruct)boxedObject;
El truco está en que al hacer el casting a object, estamos haciendo un boxing de la estructura, es decir, lo estamos convirtiendo en objecto, y podemos pasarselo al método SetValue(). Ya que todos sabemos que las estructuras se pasan por valor.
Y justo después casteamos ese objeto al tipo de la estructura para hacer el unbox y quedarnos con el valor de la estructura.
Espero que os resulte útil.