Ваш код использует следующую перегрузку Activator.CreateInstance Method :
public static Object CreateInstance(
Type type,
params Object[] args
)
Обратите внимание на ключевое слово params
.
Теперь давайте посмотримна ваш код:
Activator.CreateInstance(type, null)
Это передает нулевую ссылку как args
.В этом случае метод ищет конструктор без параметров.
object arg = // ...
Activator.CreateInstance(type, arg)
Передается одноэлементный массив, содержащий нулевую ссылку как args
, поскольку arg
объявлено как object
.В этом случае метод ищет конструктор с одним параметром.
Чтобы избежать двусмысленности, вызовите метод следующим образом:
object[] args = null; // 0 parameters
// - or -
object[] args = new object[] { "Hello World" }; // 1 parameter
var result = (MyClass)Activator.CreateInstance(type, args);