3 回答
TA贡献1831条经验 获得超4个赞
的值rectangle被装箱-但是您将丢失被修改的装箱值。尝试这个:
Rectangle rectangle = new Rectangle();
PropertyInfo propertyInfo = typeof(Rectangle).GetProperty("Height");
object boxed = rectangle;
propertyInfo.SetValue(boxed, 5, null);
rectangle = (Rectangle) boxed;
TA贡献1813条经验 获得超2个赞
听说过SetValueDirect吗?他们这样做是有原因的。:)
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
}
}
除了未记录的方法以外,还有其他方法__makeref可以使用(请参阅参考资料System.TypedReference),但它们更痛苦。
TA贡献1770条经验 获得超3个赞
我有完全一样的问题。@丹·布莱恩特(Dan Bryant)-尽管我同意可变结构是邪恶的,但我这样做的原因是要为不可变结构创建工厂类,并且我需要能够设置只读属性。我正在做与MVC Model Binder子系统类似的事情,尽管简单得多,并且与Web无关。因此,我正在制作不可变的结构,但我只允许自己在创建时对它们进行一次突变,因此,我认为这将避免所有潜在的弊端。
- 3 回答
- 0 关注
- 427 浏览
添加回答
举报