2012-08-07 66 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方法声明允许关键字在 中。