1

我无法弄清楚为什么这不起作用。谁能向我解释为什么 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!?
}

任何帮助表示赞赏。

4

1 回答 1

4

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

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

于 2012-01-03T20:55:32.597 回答