Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从NameValueCollection(或类似)更新对象参数?_C#_C# 4.0_Asp.net Mvc 3_Namevaluecollection - Fatal编程技术网

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

}