日期:2014-05-20  浏览次数:21236 次

请问反射得到的集合属性如何赋值?
ConstructorInfo   info   =   type.GetConstructor(new   Type[]   {   });
object   objEntity   =   info.Invoke(null);

objEntity为实体实体

PropertyInfo   property   =   pType.GetProperty(detailName);
property   为objEntity的集合属性,类型为BindingList <DataEntity>

有一个   BindingList <DataEntity>   details
details有一组数据,如何把details的数据赋给property

property.SetValue(objEntity,   details,   null);
这样赋值是不行的,因为property是只读属性

((BindingList <DataEntity> )property).Add(details[i])
这样的方法也不行,因为没有给objEntity这个实体中的集合属性赋值

请教了,谢谢!

------解决方案--------------------
如果属性是 只读的话 是不可以给它赋值的
------解决方案--------------------
嗯,如果是你自己写的话,需要自己给属性增添set方法
------解决方案--------------------
PropertyInfo property = .....
Type t = property.DeclaringType;
MethodInfo mi = t.GetMethod( "Add ");
mi.Invoke( property , .... )
------解决方案--------------------
mi.Invoke( property , .... )
这个方法最后一个参数是object[],意思是这个函数的参数
类似有个方法
void test( int a )
...
MethodInfo mi = type.GetMethod( "test " );
mi.Invoke( type类型实例 ,new object[]{1} )
------解决方案--------------------
用type.GetMember( "m_Test ");得到Field,对Field贬值.
------解决方案--------------------
((BindingList <DataEntity> )property).Add(details[i])
这样的方法也不行,因为没有给objEntity这个实体中的集合属性赋值
====
你不能先得到BindingList <DataEntity> 的值吗?
BindingList <DataEntity> list = property.GetValue(objEntity, null);
list.Clear();
list.Add(details[i]);