41

C#で複数のparamsパラメータを持つことは可能ですか? このようなもの:

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

しかし、それが可能かどうかはわかりません。もしそうなら、コンパイラは引数をどこで分割するかをどのように決定しますか?

4

7 に答える 7

46

params 引数は 1 つしか持てません。2 つの配列引数を持つことができ、呼び出し元は配列初期化子を使用してメソッドを呼び出すことができますが、params 引数は 1 つしか存在できません。

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

...

foobar(new[] { 1, 2, 3 }, new[] { "a", "b", "c" });
于 2012-08-07T03:11:38.287 に答える
37

いいえ、これは不可能です。これを取る:

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[] {         });

ただし、次のように 2 つの配列をパラメーターとして使用できます。

void Mult(int[] arg1, params long[] arg2)
于 2012-08-07T03:12:00.450 に答える
12

MSDNから- params

メソッド宣言の params キーワードの後に​​パラメータを追加することはできません。また、メソッド宣言で使用できる params キーワードは 1 つだけです。

于 2012-08-07T03:24:22.527 に答える
6

いいえ、単一のパラメーターのみが許可されており、それも最後の引数でなければなりません。これを読む

これはうまくいきます

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

しかし、これはうまくいきません

public void Correct(params string[] parg, int i) { ... }
于 2012-08-07T03:12:23.807 に答える
1

不可能です。メソッド宣言ごとに 1 つの params キーワードのみにすることができます - MSDN から - http://msdn.microsoft.com/en-us/library/w5zay9db(v=vs.71).aspx

于 2012-08-07T03:13:24.183 に答える
0
void useMultipleParams(int[] foo, string[] bar)
{
}


useMultipleParams(new int[]{1,2}, new string[] {"1","2"}) 
于 2012-08-07T03:15:35.177 に答える