2013-02-28 17 views

回答

3

最简单的方法是用你想要传递的参数填充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()); 
+1

@Tomas:你不知道,传递给方法的参数是由编译器自动到一个数组结合起来呢?像MyMethodWithVarArgs(1,2,3,4,5,6)一样调用像MyMethodWithVarArgs(新对象[] {1,2,3,4,5,6})''的方法只需少量工作。 – Will 2013-02-28 20:38:02

3

使用一个简单的对象阵列...

例如,与该签名的方法

public void DoSomething(params object[] args) 

可以是像这样调用

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

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

1

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

例如,给定:

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

你可以这样做:

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