Как инициализировать динамический класс с конструктором - PullRequest
1 голос
/ 24 апреля 2019

У меня есть следующий класс:

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 ]

4 голосов
/ 24 апреля 2019

Вы можете попробовать Activator class для создания экземпляра с аргументами:

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;
}
2 голосов
/ 24 апреля 2019

вы можете использовать

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

извините, правильный ответ был дан за 10 секунд до: https://stackoverflow.com/a/55829165/5281555:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...