C# · 12月 30, 2021

.net – 如何使用Reflection在C#文件中创建List实例

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 settarget.GetType() .GetProperty(“name_of_property”) //- Assuming property is public .SetValue(target,listInstance,null); //- Assuming .CanWrite == true // on PropertyInfo

如果您不知道由target表示的类型的属性,则需要使用

target.GetType().GetProperties();

获取该实例的所有公共属性.但是,只有能够创建列表实例才能真正帮助您 – 您必须拥有一个更通用的解决方案,可以应付任何类型.除非你将专门针对列表类型.

听起来像你可能需要一个通用的界面或基础…