Как передать параметры Activator.CreateInstance <T>()

Я хочу создать экземпляр типа, который я указываю в общем методе, который у меня есть. Этот тип имеет несколько перегруженных конструкторов. Я хотел бы передать аргументы конструкторам, но

Activator.CreateInstance<T>()

не видит, чтобы это было как опция.

Есть ли другой способ сделать это?

Ответ 1

Да.

(T)Activator.CreateInstance(typeof(T), param1, param2);

Ответ 2

В качестве альтернативы Activator.CreateInstance FastObjectFactory в связанном url преформы лучше, чем Activator (начиная с .NET 4.0 и значительно лучше, чем .NET 3.5. Нет тестов/статистических данных, выполненных с .NET 4.5). См. Сообщение StackOverflow для статистики, информации и кода:

Как передать ctor args в Activator.CreateInstance или использовать IL?

Ответ 3

Есть еще один способ передать аргументы CreateInstance через именованные параметры.

Исходя из этого, вы можете передать массив по направлению CreateInstance. Это позволит вам иметь 0 или несколько аргументов.

public void CreateInstance<T>(params object[] paramArray)
{
  (T)Activator.CreateInstance(typeof(T), args:paramArray);
}