如何从NameValueCollection(或类似)更新对象参数?

时间:2011-02-10 16:28:12

标签: c# c#-4.0 asp.net-mvc-3 namevaluecollection

我正在尝试从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);

干杯, Ť

1 个答案:

答案 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上不存在该属性,或者无法从字符串中分配属性类型,则此代码将失败。因此需要适当的验证(我知道,我正在重复自己)。

您也可以使用表达式树来执行作业,特别是如果要在同一已知类型上设置大量值,则可以编译表达式树。