Ответ 1
(T)Activator.CreateInstance(typeof(T), param1, param2);
Я хочу создать экземпляр типа, который я указываю в общем методе, который у меня есть. Этот тип имеет несколько перегруженных конструкторов. Я хотел бы передать аргументы конструкторам, но
Activator.CreateInstance<T>()
не видит, чтобы это было как опция.
Есть ли другой способ сделать это?
(T)Activator.CreateInstance(typeof(T), param1, param2);
В качестве альтернативы Activator.CreateInstance FastObjectFactory в связанном url преформы лучше, чем Activator (начиная с .NET 4.0 и значительно лучше, чем .NET 3.5. Нет тестов/статистических данных, выполненных с .NET 4.5). См. Сообщение StackOverflow для статистики, информации и кода:
Как передать ctor args в Activator.CreateInstance или использовать IL?
Есть еще один способ передать аргументы CreateInstance через именованные параметры.
Исходя из этого, вы можете передать массив по направлению CreateInstance
. Это позволит вам иметь 0 или несколько аргументов.
public void CreateInstance<T>(params object[] paramArray)
{
(T)Activator.CreateInstance(typeof(T), args:paramArray);
}