为什么“params object []”需要传递为ComObject的“new object [] {parameters}”?

时间:2017-10-02 14:53:31

标签: c# object parameters com codedom

我发现了很多关于将参数传递给方法的信息,并发现让方法使用--zoom 1.8是一种很好的(有时只是)方法。

即。样本方法:

params Object[] args

但是当将这样的参数对象传递给Com方法时,它不起作用:

public void someMethod(params object[] args)
{
      //do something
}

为了使它工作,我发现我需要将参数对象作为新对象传递:

object[] passParameters = new object[2];
passParameters[0] = "test1";
passParameters[1] = "test2";

//Calling method compiled with with CodeDom
MethodInfo method = classObject.GetType().GetMethod("someMethod");
object dynamicOutput = method.Invoke(classObject, passParameters);

任何人都可以向我解释为什么我需要这样做以及背后的原因是什么?感谢。

2 个答案:

答案 0 :(得分:0)

他们没有。您可以将它们用作

someMethod("test1", "test2", ... )

<强> BUT 即可。如果您事先创建数组,则必须以不同的方式传递

答案 1 :(得分:0)

我已经意识到示例中的原始passParameters对象包含两个元素,我们知道:

passParameters[0] = "test1";
passParameters[1] = "test2";

但是,当数组传递给Com方法时,需要按原样传递:

new object[] { passParameters })

我对此的理解是,它创建了一个新的对象数组,它将现有的'passParameters'数组放入其第一个元素[0]中(有效地创建了一个新的2d数组):

passParameters[0][0] = "test1";
passParameters[0][1] = "test2";

我的问题中的方法MethodInfo类需要传递给Invoke方法的单个对象,这意味着原始的'passParameters'对象及其两个元素的参数太多了。通过将其传递到一个新对象中,它将所有元素作为单个对象传递,但包含这些参数的数组。