我正在尝试从MyClass
更新已知类型NameValueCollection
的公共参数(请参阅下面的代码)。 MVC3 中的可能,Controller
类具有UpdateModel
方法,与Request.Params
完全相同。我想在Controller
之外做这件事。
有什么想法吗?
public class MyClass
{
public string MyParam { get; set; }
}
...
var values = new NameValueCollection() { { "MyParam", "any string value for my param" } };
var myInstance = new MyClass();
Update(myInstance, values);
干杯, Ť
答案 0 :(得分:2)
您应该使用反射来执行此任务:
此代码未经适当验证提供,应将其放入方法中。
var type = myInstance.GetType();
foreach(var keyValue in values)
{
type.InvokeMember(keyValue.Key,BindingFlags.SetProperty,null,myInstance, new object[]{keyValue.Value});
}
此代码中可能存在错误,但即使是这种情况,一般的想法也在这里。 2备注:如果MyClass上不存在该属性,或者无法从字符串中分配属性类型,则此代码将失败。因此需要适当的验证(我知道,我正在重复自己)。
您也可以使用表达式树来执行作业,特别是如果要在同一已知类型上设置大量值,则可以编译表达式树。