首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请教反射得到的集合属性怎么赋值

2012-02-08 
请问反射得到的集合属性如何赋值?ConstructorInfoinfotype.GetConstructor(newType[]{})objectobjEntity

请问反射得到的集合属性如何赋值?
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]);

热点排行