我有方法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