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

4

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

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

3个回答

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

2
@Tomas:你不知道传递给方法的参数会被编译器自动组合成一个数组吗?像这样调用方法 MyMethodWithVarArgs(1,2,3,4,5,6)MyMethodWithVarArgs(new object[] {1,2,3,4,5,6}) 是一样的,只是少了些工作。 - user1228

5
使用一个简单的对象数组...
例如,具有以下签名的方法:
public void DoSomething(params object[] args)

可以这样调用

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

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


2
我可能漏掉了什么,但是为什么你不能根据你提到的条件直接调用方法并传入所需参数呢?你不需要将它们放入一个数组中(除非你已经有了这些参数的数组,但那样你只需传递该数组...)。
例如,给定:
public static void Method(params object[] args)
{
}

您可以做以下事情:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接