属性上的SetValue不';t更新对象

本文关键字:更新 对象 SetValue 属性 | 更新日期: 2023-09-27 18:19:32

我不明白为什么这不起作用。有人能向我解释为什么SetValue不设置对象属性的值吗?

T row = new T();
foreach (PropertyInfo property in row.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
    Field[] dbFields = property.GetCustomAttributes(typeof(Field), false) as Field[];
    Object obj = (Int32)1000; // Arbitrary Value;
    Object castObj = Convert.ChangeType(obj, property.PropertyType);
    property.SetValue(row, castObj, null); // DOES NOT UPDATE row!! WHY!?
}

感谢您的帮助。

属性上的SetValue不';t更新对象

只要T是引用类型(类),它就应该可以正常工作。如果T是一个值类型(一个结构),它就不会按原样工作。该值将在每次调用property.SetValue时被装箱,并且现有值将保持不变。这可能是问题所在吗?如果是这样的话,我建议您首先避免编写可变的值类型,而是考虑将其作为引用类型。

可以强制将其装箱一次,然后在最后取消装箱一次——但如果我是您,我只会避开可变的值类型。