为什么 "params object[]" 需要作为 "new object[] { parameters }" 传递给 Com 方法?
Why does "params object[]" need passing as "new object[] { parameters }" for Com Method?
我找到了很多关于将参数传递给方法的信息,并且发现让方法使用 params Object[] args
是一种很好的(有时是唯一的)方法。
即示例方法:
public void someMethod(params object[] args)
{
//do something
}
但是当像这样将参数对象传递给 Com 方法时,它不起作用:
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);
为了让它工作,我发现我需要将参数对象作为新对象传递:
object dynamicOutput = method.Invoke(classObject,(new object[] { passParameters });
任何人都可以向我解释为什么我需要这样做以及背后的原因是什么?谢谢。
他们没有。您可以将它们用作
someMethod("test1", "test2", ... )
但是。如果你事先创建了一个 array,它必须以不同的方式传递,就像你遇到的那样
我开始意识到示例中的原始 passParameters
对象包含两个元素,正如我们所知:
passParameters[0] = "test1";
passParameters[1] = "test2";
但是,当数组传递给Com方法时,需要这样传递:
new object[] { passParameters })
我对此的理解是,它创建了一个新的对象数组,该数组将现有的 'passParameters' 数组放入其第一个元素 [0](有效地创建了一个新的二维数组):
passParameters[0][0] = "test1";
passParameters[0][1] = "test2";
我的问题中的 MethodInfo
class 方法需要将一个对象传递给 Invoke
方法,这意味着原始的 'passParameters' 对象及其两个元素有太多的争论。通过将它传递到一个新对象中,这会将所有元素作为单个对象传递,但包含这些参数的数组。
我找到了很多关于将参数传递给方法的信息,并且发现让方法使用 params Object[] args
是一种很好的(有时是唯一的)方法。
即示例方法:
public void someMethod(params object[] args)
{
//do something
}
但是当像这样将参数对象传递给 Com 方法时,它不起作用:
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);
为了让它工作,我发现我需要将参数对象作为新对象传递:
object dynamicOutput = method.Invoke(classObject,(new object[] { passParameters });
任何人都可以向我解释为什么我需要这样做以及背后的原因是什么?谢谢。
他们没有。您可以将它们用作
someMethod("test1", "test2", ... )
但是。如果你事先创建了一个 array,它必须以不同的方式传递,就像你遇到的那样
我开始意识到示例中的原始 passParameters
对象包含两个元素,正如我们所知:
passParameters[0] = "test1";
passParameters[1] = "test2";
但是,当数组传递给Com方法时,需要这样传递:
new object[] { passParameters })
我对此的理解是,它创建了一个新的对象数组,该数组将现有的 'passParameters' 数组放入其第一个元素 [0](有效地创建了一个新的二维数组):
passParameters[0][0] = "test1";
passParameters[0][1] = "test2";
我的问题中的 MethodInfo
class 方法需要将一个对象传递给 Invoke
方法,这意味着原始的 'passParameters' 对象及其两个元素有太多的争论。通过将它传递到一个新对象中,这会将所有元素作为单个对象传递,但包含这些参数的数组。