反射 泛化 问题

问题描述

本人想做一个通用的加载数据到树控件中,利用反射技术.只加载了第一层,没有加载下级。利用反射利用读到了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

时间: 2024-10-26 17:48:28

反射 泛化 问题的相关文章

Java通过反射实例化泛型类的问题

问题描述 Java语言中,想通过反射实例化一个抽象类的子类,问题也可以简化点,可以建个类继承这个抽象类,然后实例化子类.public abstract class MyClass<T> { MyClass() { }}在代码中可以这么写:new MyClass<String>() {}但是如果通过反射,怎么把String这个type传进去,或者通过反射获得constructor,怎么把泛型信息传进去:下面这个是个错误的写法,只是说明要实现的内容:new MyClass<Cla

Java语言class类用法及泛化(详解)_java

这篇文章主要介绍了Java语言class类用法及泛化(详解),大家都知道Java程序在运行过程中,对所有的对象进行类型标识,也就是RTTI.这项信息记录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类.Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建,具体内容介绍如下: 说白了就是: Class类也是类的一种,只是名字和class关键字高度相似.Java是大小写敏感的语言. Class类的对象内容是你创

从反射看委托与事件 委托真的是一个类

关于委托与事件,网上介绍得非常之多,在此不再赘述,本人最近需要捣鼓一些委托,因而对委托进行一 定的寻根究底,故用反射把委托的成员揪出来,且看如下代码: delegate void DelegateDemo(); static event DelegateDemo delHandle; static void Main() { delHandle += new DelegateDemo(MyDelegate_delHandle); MemberInfo[] mis = delHandle.GetT

JAVA核心层--反射--动态代理

本文发表于2010年,时间较早,部分问题解释不是十分准确,所以需要进一步了解,请参看2012年版本: java之架构基础-动态代理&cglib 要在JAVA技术上突破普通的层面,并拥有一翻设计理念的高度,除了要有很好的设计思维之外,反射在适当的使用下,将会把框架做得非常清晰,并且代码编写也非常简便. 在面向对象的编程中,我们为什么要忌讳去大量使用if else switch语句,因为这样写是将逻辑硬编码了,JAVA的思想就是将其配置化,一旦可配置化后,就逐渐可管理化,并随着产品的成熟逐步实现自动

程序集和反射(二)

上篇文章主要介绍了程序集的内容:程序集和反射(一),时隔这么久,今天终于腾出点时间,把反射部分的知识点给整理一下,不把这个写完,心里总觉得有点堵.对于反射,我相信很多人跟LZ一个德行,不会,所以不用,不用,所以永远不会.      通过System.Reflection命名空间中的类已经System.Type,您可以获取有关已加载的程序集和在其中定义的类型(如类.接口.值类型)的信息.您也可以使用反射在运行时创建类型实例,以及调用和访问这些实例.      程序集包含模块,而模块包含类型,类型又

Android中利用反射技术实现加减乘除

JAVA反射机制定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有 属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取 的信息以及动态调用对象的方法的功能称为java语言的反射机制. Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类: 在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和 方法:在运行时调用任意一个对象的方法:生成动态代理. 有时候我们说某个语言具有很强的动态性,有时候我们会区分动态和静态的

结合AJAX和反射Refrection,实现页面无刷执行函数体

ajax|函数|页面|执行 其实做这么个东西没什么具体用途,只是在看到这个帖子和这篇BLOG后来了兴趣,突发其想来试试能不能做个在线的编译器,顺便也研究下ajax和反射: ajax是看很长时间了,比较关注微软的开发包Atlas的动态,也有很多资源: ·MSDN的Atlas 网站 ·ASP.NET "Atlas" 官方网站 ·ASP.NET "Atlas" 预览文档 ·Atlas  快速入门教程 以上几个连接来自思归 的blog,看来他也很关心这项技术: 前面好长一段

C#反射技术的简单操作(读取和设置类的属性)

要想对一个类型实例的属性或字段进行动态赋值或取值,首先得得到这个实例或类型的Type,微软已经为我们提供了足够多的方法. 首先建立一个测试的类 复制代码 代码如下: public class MyClass { public int one { set; get; } public int two { set; get; } public int five { set; get; } public int three { set; get; } public int four { set; ge

谈.NET反射的封装

.NET反射提供了在运行时获取对象类型元数据的途径,使程序可以动态地调用对象的属性.方法.动态性带来的代价是反射调用不像基于静态类型的直接调用那样简洁,且缺乏类型检查机制,失去了IDE智能提示,容易出错:于是,不少朋友尝试对.NET反射进行封装. 这个话题是仁者见仁,智者见智,这里我也谈谈自己对.NET反射封装的思路,请先看下面的示例代码: static void Main(string[] args) { Person liu = new Person("liu", 26); Ref