猿问

使用反射给实体类的属性赋值(注:实体类属性包含其它实体类)

string strRequestValue = null; PropertyInfo[] proInfo = Modules.GetType().GetProperties(); foreach (PropertyInfo p in proInfo) { if (p.PropertyType.IsClass) { PropertyInfo[] childProInfo = p.PropertyType.GetProperties(); foreach (PropertyInfo item in childProInfo) { strRequestValue = Request[p.Name + "." + item.Name]; if (strRequestValue != null) { item.SetValue(p, GetValue(strRequestValue, item), null); } } } ………… } 上面代码中Modules表示当前要赋值的实体类对象,比如这样一个实体类 public class EntityArticle { private EntityNode _node; public EntityNode node { get { return _node; } set { _node = value; } } private EntityNodeAttach _nodeAttach; public EntityNodeAttach nodeAttach { get{return _nodeAttach;} set{_nodeAttach = value;} } …… } 问题就出在:item.SetValue(p, GetValue(strRequestValue, item), null); SetValue的第一个参数需要“设置其属性值得对象”,但是我不知道在这里如何得到这个属性对象 希望能有人指点一下,谢谢!
宝慕林4294392
浏览 919回答 6
6回答

桃花长相依

用 Activator.CreateInstance.

慕桂英546537

要实例化这个类

莫回无

关键代码在这,亲测可用,如果你还不行,联系我找我要测试代码   if (p.PropertyType.IsClass){    var type1 = p.PropertyType;    var obj = Assembly.Load(type1.Assembly.FullName).CreateInstance(type1.FullName);    var properties1 = type1.GetProperties();    foreach (var p1 in properties1)    {        p1.SetValue(obj, "111", null);    }    p.SetValue(t, obj, null);}

犯罪嫌疑人X

@Rich.T: 谢谢了,这种方式应该也可以,但我觉得使用Activator.CreateInstance(p.PropertyType)更好。

明月笑刀无情

你要实例化一个对象,然后才能给他的属性赋值。 怎么实例化我也不是很懂,如果出你的类有构造函数就要反射他的构造函数来实例化
随时随地看视频慕课网APP
我要回答