1

我正在尝试MyClass从 a更新已知类型的公共参数NameValueCollection(请参见下面的代码)。这在MVC3中是可能的,该类有一个方法与. 我想在这之外做这件事。ControllerUpdateModelRequest.ParamsController

有什么想法吗?

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);

干杯,T

4

1 回答 1

2

您应该使用反射来执行此任务:

此代码未经适当验证而提供,应放入方法中。

var type = myInstance.GetType();
foreach(var keyValue in values)
{
   type.InvokeMember(keyValue.Key,BindingFlags.SetProperty,null,myInstance,  new object[]{keyValue.Value});    

}

这段代码可能有错误,但即使是这样,一般的想法也在这里。2 备注:如果 MyClass 上不存在该属性,或者无法从字符串分配属性类型,则此代码将失败。因此,它需要适当的验证(我知道,我在重复自己)。

您也可以使用表达式树来执行这项工作,特别是当您在同一已知类型上设置大量值时,因为可以编译表达式树。

于 2011-02-10T16:52:22.923 回答