2012-08-07 69 views
20

是否有可能有多個params參數在C#中?這樣的事情:是否有多個「params」參數?

void foobar(params int[] foo, params string[] bar) 

但我不知道這是可能的。如果是,編譯器將如何決定在哪裏分割參數?

+1

歡迎使用[所以]加里,在幾乎同樣多秒列出5個答案。爲什麼不傳遞一個類的參數?或者'>' – 2012-08-07 03:12:57

+0

通過參加一個類的參數意味着什麼? – garytchao 2012-08-07 20:57:43

+1

我一直在遭受缺少此功能:( – nawfal 2013-05-29 05:42:50

回答

31

你只能有一個PARAMS參數。你可以有兩個數組參數,調用者可以使用數組初始化器來調用你的方法,但只能有一個參數。

void foobar(int[] foo, string[] bar) 

... 

foobar(new {1, 2,3}, new {"a", "b", "c"}); 
+0

致謝,正是答案我一直在尋找:) – garytchao 2012-08-07 20:49:00

+0

Upvoting爲您10票(給你一個徽章),只是因爲OP不接受你的答案。 :) – Scott 2014-02-14 21:27:14

+0

@Scott感謝:-) – 2014-02-15 04:42:57

27

不,這是不可能的。藉此:

void Mult(params int[] arg1, params long[] arg2) 

如何應該解釋這個編譯器:

Mult(1, 2, 3); 

它可以被理解爲任何一種:

Mult(new int[] {   }, new long[] { 1, 2, 3 }); 
Mult(new int[] { 1  }, new long[] { 2, 3 }); 
Mult(new int[] { 1, 2 }, new long[] {  3 }); 
Mult(new int[] { 1, 2, 3 }, new long[] {   }); 

你可以把兩個數組像PARAMS但是:

void Mult(int[] arg1, params long[] arg2) 
+4

@newfal正確的,但我沒有錯,所以我被downvote很困惑。 – 2013-05-29 14:17:19

+0

,因爲您聲明這是缺乏此功能的原因。 – nawfal 2013-05-29 14:18:45

+0

如果PARAMS基團的類型是不同的,那麼海誓山盟,編譯器可以解釋..例如可以說,方法(PARAMS INT []號碼,則params串[]文本){} 。方法(34,76,「嗨」,「你好!」); – 2017-06-15 08:38:15

3

不,o只有一個參數是允許的,甚至必須是最後一個參數。閱讀this

這將工作

public void Correct(int i, params string[] parg) 
{} 

但是,這是行不通的

public void Correct(params string[] parg, int i) 
{} 
0
void useMultipleParams(int[] foo, string[] bar) 
{ 
} 


useMultipleParams(new int[]{1,2}, new string[] {"1","2"}) 
+2

您沒有使用params關鍵詞,因爲它在問題中被問到。 – PVitt 2012-08-07 09:28:30

10

MSDN - params

沒有額外的參數在 方法聲明中的params關鍵字之後被允許,並且只有一個PARAMS方法聲明允許關鍵字在 中。