如何初始化具有构造函数的动态类

时间:2019-04-24 11:26:21

标签: c# .net reflection

我有以下课程:

public class CustomItem
{
    //....
}

,并且有多个类在其构造函数方法中接受CustomClass。例如:

public class FirstClass
{
   public FirstClass(CustomItem customItem) { }
}

我正在尝试创建一个接受动态类并将其初始化的通用方法。像这样:

public List<T> MyTestMethod<T>(CustomItem myCustomItem) where T : class, new()
{
   List<T> list = new List<T>();
   foreach(CustomItem myCustomItem in listOfCustomItems)
   {
      T instance = new T(myCustomItem);
      list.Add(T);
   }
   return list;
}

因此,它可以像这样使用:

List<FirstClass> List1 = MyTestMethod<FirstClass>(customItem);
List<SecondClass> List2 = MyTestMethod<SecondClass>(customItem);

T中实例化MyTestMethod的语法不正确。 是我想做的事吗?

2 个答案:

答案 0 :(得分:4)

您可以尝试Activator类来创建带有参数的实例:

Activator.CreateInstance(typeof(T), args: myCustomItem);

根据您的情况:

public List<T> MyTestMethod<T>(CustomItem myCustomItem) where T : class
{
   List<T> list = new List<T>();
   foreach(CustomItem myCustomItem in listOfCustomItems)
   {
      T instance = (T)Activator.CreateInstance(typeof(T), args: myCustomItem);
      list.Add(instance);
   }
   return list;
}

答案 1 :(得分:2)

您可以使用

T instance =  (T)Activator.CreateInstance(typeof(T), myCustomItem);

抱歉,在https://stackoverflow.com/a/55829165/5281555之前10秒给出了正确答案:)