una - struct c# ejemplos
¿Hay alguna manera de establecer propiedades en las instancias de struct usando reflection? (2)
¿Has oído hablar de SetValueDirect
? Hay una razón por la que lo hicieron. :)
struct MyStruct { public int Field; }
static class Program
{
static void Main()
{
var s = new MyStruct();
s.GetType().GetField("Field").SetValueDirect(__makeref(s), 5);
System.Console.WriteLine(s.Field); //Prints 5
}
}
Hay otros métodos además del __makeref
no __makeref
que puede usar (vea System.TypedReference
) pero son más dolorosos.
Estoy intentando escribir un código que establece una propiedad en una estructura (importante que es una propiedad en una estructura) y está fallando:
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle();
PropertyInfo propertyInfo = typeof(System.Drawing.Rectangle).GetProperty("Height");
propertyInfo.SetValue(rectangle, 5, null);
El valor de Altura (según lo informado por el depurador) nunca se establece en nada, se mantiene en el valor predeterminado de 0.
He reflexionado mucho sobre las clases anteriores y esto ha funcionado bien. Además, sé que cuando se trata de estructuras, necesita usar FieldInfo.SetValueDirect si establece un campo, pero no conozco un equivalente para PropertyInfo.
El valor de rectangle
está encuadrado, pero luego está perdiendo el valor encuadrado, que es lo que se está modificando. Prueba esto:
Rectangle rectangle = new Rectangle();
PropertyInfo propertyInfo = typeof(Rectangle).GetProperty("Height");
object boxed = rectangle;
propertyInfo.SetValue(boxed, 5, null);
rectangle = (Rectangle) boxed;