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

前端之家收集整理的这篇文章主要介绍了.net – 如何使用Reflection在C#文件中创建List实例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_1@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();

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

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

猜你在找的C#相关文章