.net – 如何使用Reflection在C#文件中创建List实例
发布时间:2020-12-15 06:51:57 所属栏目:百科 来源:网络整理
导读:HI, 我需要使用反射在运行时为列表对象创建实例.例如我有两个类,如下所示, class Class1{ ListClass2 class2List; public ListClass2 Class2List { get;set; }}class Class2{ public string mem1; public string mem2;} 在另一个Class3类中,在运行时创建Clas
HI,
我需要使用反射在运行时为列表对象创建实例.例如我有两个类,如下所示, class Class1 { List<Class2> class2List; public List<Class2> Class2List { get;set; } } class Class2 { public string mem1; public string mem2; } 在另一个Class3类中,在运行时创建Class1的实例后,我想为该类的所有属性分配值.在这种情况下,Class2List是List&Class2>的属性.在运行时,我不知道List&Class2>的类类型.如何初始化属性,即List< Class2>在class3中运行时. 任何建议非常感谢… 解决方法
而不是质疑你的动机,或者试图取消你正在做的 – 我只是在标题中回答这个问题.
给定一个类型实例listElemType,它表示要传递给List>的类型参数.在运行时输入: var listInstance = (IList)typeof(List<>) .MakeGenericType(listElemType) .GetConstructor(Type.EmptyTypes) .Invoke(null); 然后你可以通过它的IList接口实现来处理列表. 或者,确实,您可以在MakeGenericType调用中停止,并使用它在Activator.CreateInstance的调用中生成的类型,如Daniel Hilgarth的答案. 然后,给定要设置其属性的目标对象: object target; //the object whose property you want to set target.GetType() .GetProperty("name_of_property") //- Assuming property is public .SetValue(target,listInstance,null); //- Assuming .CanWrite == true // on PropertyInfo 如果您不知道由target表示的类型的属性,则需要使用 target.GetType().GetProperties(); 获取该实例的所有公共属性.但是,只有能够创建列表实例才能真正帮助您 – 您必须拥有一个更通用的解决方案,可以应付任何类型.除非你将专门针对列表类型. 听起来像你可能需要一个通用的界面或基础… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Zookeeper入门(七)之Java连接Zookeeper Linux环
- 在阅读PostgreSQL查询计划时,我如何“思考更好”? (附例)
- ios – 徽章计数没有增加推送通知.总计徽章计数仍为1?
- 一步一步搭建react应用-爬取豆瓣电影的电影信息
- Swift - whose view is not in the window hierarchy 问题解
- PostgreSQL触发器错误
- objective-c – 为什么iOS框架依赖项在为应用程序项目执行时
- oracle学习笔记----数据库导入导出
- 依赖注入 – 单例中依赖注入数据连接的最佳方法
- 关于 ORA-01033: ORACLE initialization or shutdown in pr