通过反射设置属性

时间:2015-05-27 13:24:57

标签: c# reflection

我有这个:

foreach (KeyValuePair<string, decimal> update in updates)
{
salesorder.GetType().InvokeMember(update.Key, BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, Type.DefaultBinder, salesorder, update.Value);
}

我在这个网站上找到了这个例子,但是它使用的是一个字符串,我的例子是十进制,但它表示不能从十进制转换为对象[]

由于

1 个答案:

答案 0 :(得分:3)

最后一个参数必须是object[],所以你需要包装decimal

foreach (KeyValuePair<string, decimal> update in updates)
{
    salesorder.GetType().InvokeMember(update.Key, BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, Type.DefaultBinder, salesorder, new object[] { update.Value });
}

如果您想更深入地设置值(如评论中所示):

foreach (KeyValuePair<string, decimal> update in updates)
{
    var property = salesorder.GetType().InvokeMember(update.Key, BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty, Type.DefaultBinder, salesorder, new object[] { });
    property.GetType().InvokeMember("Value", BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, Type.DefaultBinder, property, new object[] { update.Value });
}