我有方法params object[] args
并希望在运行时根据条件传递参数。它可以是零个对象或一个,两个对象参数。在运行时将不同数量的参数传递给params方法
如何在运行时构建params object[] args
?
我有方法params object[] args
并希望在运行时根据条件传递参数。它可以是零个对象或一个,两个对象参数。在运行时将不同数量的参数传递给params方法
如何在运行时构建params object[] args
?
最简单的方法是用你想要传递的参数填充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());
使用一个简单的对象阵列...
例如,与该签名的方法
public void DoSomething(params object[] args)
可以是像这样调用
object[] args = new object[] {"Hello", "World", 123};
DoSomething(args);
可以在运行时轻松构建数组(例如,使用List)。
我可能会错过一些东西,但是为什么不能直接使用所需的参数调用方法,具体取决于您提到的条件?你不需要把它们放到一个数组中(除非你已经将它们放在一个数组中,但是你只需传递数组......)。
例如,给定:
public static void Method(params object[] args)
{
}
你可以这样做:
if (condition1)
{
Method();
}
else if (condition2)
{
Method("arg");
}
else
{
Method("arg1", "arg2");
}
@Tomas:你不知道,传递给方法的参数是由编译器自动到一个数组结合起来呢?像MyMethodWithVarArgs(1,2,3,4,5,6)一样调用像MyMethodWithVarArgs(新对象[] {1,2,3,4,5,6})''的方法只需少量工作。 – Will 2013-02-28 20:38:02