如何将object []传递给Activator.CreateInstance(type,params object [])

时间:2014-08-26 18:54:48

标签: c# .net activator

我有一个包含空构造函数的类,并且它接受一个对象数组作为唯一参数。有点像...

public myClass(){ return; }
public myClass(object[] aObj){ return; }

这是我使用的CreateInstance()方法调用

object[] objectArray = new object[5];

// Populate objectArray variable
Activator.CreateInstance(typeof(myClass), objectArray);

它会抛出System.MissingMethodException并添加一条读取的消息 "类型' myClass'的构造函数找不到"

我所做的一些研究总是将方法称为

Activator.CreateInstance(typeof(myClass), arg1, arg2);

其中arg1和arg2是类型(string,int,bool)而不是通用对象。 如何仅使用对象数组作为参数列表来调用此方法?

注意:我尝试在方法签名中添加另一个变量。有点像...

public myClass(object[] aObj, bool notUsed){ return; }

并且这个代码执行得很好。 我也看过使用反射的方法,但我对这个具体案例特别感兴趣。如果方法签名实际上与传递的参数匹配,为什么会引发此异常?

2 个答案:

答案 0 :(得分:13)

将其投放到object

Activator.CreateInstance(yourType, (object) yourArray);

答案 1 :(得分:5)

假设您有构造函数:

class YourType {
   public YourType(int[] numbers) {
      ...
   }
}

我相信你会通过将你的数组(预期参数)嵌套为params数组的项来激活:

int[] yourArray = new int[] { 1, 2, 4 };
Activator.CreateInstance(typeof(YourType ), new object[] { yourArray });