问题描述
本人想做一个通用的加载数据到树控件中,利用反射技术.只加载了第一层,没有加载下级。利用反射利用读到了Childs数据,类型为Object,无法转换成数组。请各位专家帮忙。vb.net2005开发,代码如下:<a>http://www.jxbw.com/Example.rar</a>部分代码如下:PublicClassteamsInheritsList(Ofteam)EndClassPublicClassteamPrivatem_IDAsIntegerPrivatem_NameAsStringPrivatem_ChildsAsteams'添加可用属性PublicPropertyID()AsIntegerGetReturnm_IDEndGetSet(ByValvalueAsInteger)m_ID=valueEndSetEndProperty'添加可用属性PublicPropertyName()AsStringGetReturnm_NameEndGetSet(ByValvalueAsString)m_Name=valueEndSetEndPropertyPublicReadOnlyPropertyChilds()AsteamsGetReturnm_ChildsEndGetEndPropertyPublicSubNew()m_Childs=NewteamsEndSubEndClass
解决方案
解决方案二:
按你的需求,LoadTreeView函数应该是一个递归函数,但你提供的代码并不递归.
解决方案三:
跟泛型没关系
解决方案四:
用GetType()看一下类型,你想转换成数组,应该通过反射使用它的方法ToArray
解决方案五:
就是递归没有办法用呀。'''<summary>'''通过反射技术来Objs数据加载到树控件中。'''</summary>'''<paramname="Nodes">结点集合</param>'''<paramname="Objs">对象</param>'''<paramname="Name">名称在Obj里的名称</param>'''<paramname="Childs">子集的名称</param>'''<remarks></remarks>PublicSharedSubLoadTreeView(ByValNodesAsTreeNodeCollection,_ByValObjs()AsObject,_ByValNameAsString,_ByValChildsAsString)DimiAsIntegerIfObjs.Length=0ThenExitSubEndIfDimtAsTypet=Objs(Objs.GetLowerBound(0)).GetTypeDimfs()AsSystem.Reflection.FieldInfofs=t.GetFields()Dimps()AsSystem.Reflection.PropertyInfops=t.GetProperties()DimpnAsSystem.Reflection.PropertyInfopn=FindProperty(ps,Name)DimpcAsSystem.Reflection.PropertyInfopc=FindProperty(ps,Childs)DimstrNameAsStringDimCsAsObjectDimnodeAsTreeNodeFori=0ToObjs.Length-1strName=pn.GetValue(Objs(i),Nothing).ToStringCs=pc.GetValue(Objs(i),Nothing)node=Nodes.Add(strName)LoadTreeView(Nodes,DirectCast(Cs,ArrayList).toarray,Name,Childs)NextiEndSub
解决方案六:
LoadTreeView(Nodes,DirectCast(Cs,ArrayList).toarray,Name,Childs)CS类型是teams,teams是继承List(ofteam)的,所有没有办法转化
解决方案七:
下一层的nodeCollection是node,而不是nodes.你自己好好测试.试到行为止.按你的实力,这应该不是问题.
解决方案八:
Object转换成泛型类型不知道怎么转换!
解决方案九:
你可以参考我这个:一个数据筛选类http://blog.csdn.net/lzmtw/archive/2006/12/18/1447777.aspxLzmTW.uSystem.uCollection+SimpleFilterhttp://blog.csdn.net/lzmtw/archive/2006/12/18/1447880.aspx
解决方案十:
MARK
解决方案十一:
UP
解决方案十二:
将你的泛型再做一次封装,我也曾经遇到这个问题,我记得我当时是对publicclasslist(ofitem)使用一个publicclasslistEX继承上面那个类,封装掉那个of,即可.顺便的,反射的文章写了一篇你看看http://blog.csdn.net/go2newlife/archive/2007/11/27/1904687.aspx