2

我有方法params object[] args并希望根据条件在运行时传递参数。它可以是零个对象或一、两个对象参数。

如何params object[] args在运行时构建?

4

3 回答 3

6

最简单的方法是List<object>使用您想要传递的参数填充 a,然后ToArray()在调用 vararg 方法之前调用它。List<T>可以动态增长,让您根据需要容纳尽可能多的参数。这是一个假设的示例,它传递一个包含七个参数的数组:

var args = new List<object>();
args.Add(firstArg);
args.Add(secondArg);
for (int i = 0 ; i != 5 ; i++) {
    args.Add(i);
}
MyMethodWithVarArgs(args.ToArray());
于 2013-02-28T08:48:47.473 回答
4

使用一个简单的对象数组...

例如,具有此签名的方法

public void DoSomething(params object[] args)

可以这样称呼

object[] args = new object[] {"Hello", "World", 123};
DoSomething(args);

可以在运行时轻松构建数组(例如,使用 List)。

于 2013-02-28T08:49:42.610 回答
1

我可能遗漏了一些东西,但是为什么不能根据您提到的条件直接使用所需的参数直接调用该方法?您不需要将它们放入数组中(除非您已经将它们放入数组中,但是您只需传递数组......)。

例如,给定:

public static void Method(params object[] args)
{
}

你可以做:

if (condition1)
{
    Method();
}
else if (condition2)
{
    Method("arg");
}
else
{
    Method("arg1", "arg2");
}
于 2013-02-28T09:05:04.073 回答