我不明白为什么这不起作用。有人能向我解释为什么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!?
}
感谢您的帮助。
只要T
是引用类型(类),它就应该可以正常工作。如果T
是一个值类型(一个结构),它就不会按原样工作。该值将在每次调用property.SetValue
时被装箱,并且现有值将保持不变。这可能是问题所在吗?如果是这样的话,我建议您首先避免编写可变的值类型,而是考虑将其作为引用类型。
您可以强制将其装箱一次,然后在最后取消装箱一次——但如果我是您,我只会避开可变的值类型。