【问题标题】:How to pass object[] to Activator.CreateInstance(type, params object[])如何将 object[] 传递给 Activator.CreateInstance(type, params object[])
【发布时间】:2014-10-20 05:12:17
【问题描述】:

我有一个类,它包含一个空构造函数和一个接受对象数组作为其唯一参数的类。比如……

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 是类型(字符串、int、bool)而不是通用对象。 我将如何仅以对象数组作为其参数列表来调用此方法?

注意:我尝试在方法签名中添加另一个变量。比如……

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

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

【问题讨论】:

    标签: c# .net activator


    【解决方案1】:

    投给object:

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

    【讨论】:

    • 如果他的构造函数接受一个数组,那么它就是 CreateInstance 数组的一个单项,所以它应该是一个嵌套在外部数组项中的数组。
    • @AaronLS:它是嵌套的,因为参数是用params声明的。
    • 是的,是的,我可能有点过于字面意思了。
    • 我现在明白了,所以对象数组应该作为单个参数传递,谢谢大家!
    【解决方案2】:

    假设你有构造函数:

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

    我相信你会通过嵌套你的数组,即预期的参数,作为 params 数组的一项来激活:

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

    【讨论】:

      猜你喜欢
      • 2023-01-30
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 2012-05-13
      • 2021-01-16
      • 2014-06-08
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多