C# 如何从NameValueCollection(或类似)更新对象参数?
我正在尝试从C# 如何从NameValueCollection(或类似)更新对象参数?,c#,c#-4.0,asp.net-mvc-3,namevaluecollection,C#,C# 4.0,Asp.net Mvc 3,Namevaluecollection,我正在尝试从NameValueCollection更新已知类型MyClass的公共参数(请参见下面的代码)。这是可能的在MVC3中,Controller类有一个UpdateModel方法,该方法可以对请求.Params执行此操作。不过,我想在控制器之外执行此操作 有什么想法吗 public class MyClass { public string MyParam { get; set; } } 干杯, T您应该使用反射来执行此任务: 提供此代码时未进行适当验证,应将其放入方法中 v
NameValueCollection
更新已知类型MyClass
的公共参数(请参见下面的代码)。这是可能的在MVC3中,Controller
类有一个UpdateModel
方法,该方法可以对请求.Params执行此操作。不过,我想在控制器之外执行此操作
有什么想法吗
public class MyClass
{
public string MyParam { get; set; }
}
干杯,
T您应该使用反射来执行此任务:
提供此代码时未进行适当验证,应将其放入方法中
var type = myInstance.GetType();
foreach(var keyValue in values)
{
type.InvokeMember(keyValue.Key,BindingFlags.SetProperty,null,myInstance, new object[]{keyValue.Value});
}
这段代码中可能有错误,但即使是这样,总体思路仍然在这里。
2备注:如果MyClass上不存在属性,或者无法从字符串分配属性类型,则此代码将失败。因此,它需要适当的验证(我知道,我在重复我自己)
您也可以使用表达式树来执行该作业,尤其是在同一已知类型上设置许多值时,因为可以编译表达式树
var type = myInstance.GetType();
foreach(var keyValue in values)
{
type.InvokeMember(keyValue.Key,BindingFlags.SetProperty,null,myInstance, new object[]{keyValue.Value});
}