在运行时将不同数量的参数传递给params方法

时间:2013-02-28 08:46:08

标签: c#

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

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

3 个答案:

答案 0 :(得分:4)

最简单的方法是使用您想要传递的参数填充List<object>,然后在调用vararg方法之前调用ToArray()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());

答案 1 :(得分:3)

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

例如,具有此签名的方法

public void DoSomething(params object[] args)

可以这样调用

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

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

答案 2 :(得分:1)

我可能会遗漏一些东西,但为什么你不能简单地用你想要的参数直接调用方法,具体取决于你提到的条件?你不需要将它们放入一个数组中(除非你已经将它们放在一个数组中,但是你只需要传递数组......)。

例如,给定:

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

你可以这样做:

if (condition1)
{
    Method();
}
else if (condition2)
{
    Method("arg");
}
else
{
    Method("arg1", "arg2");
}