8

ご存知のように、C#はparamsキーワードを通じて可変個引数メソッドをサポートしています。

int Add(params int[] xs) {
    return xs.Sum();
}

次に、任意の数の引数を使用して呼び出すことができます。

Add(1);
Add(1, 2);
Add(1, 2, 3);

しかし、 s1のAdd配列を使用して呼び出したいとしましょ。これは可能であり、どのように(できれば反射なしで)可能ですか?次のことを試しましたが、構文エラーが発生しました(構文は純粋に推測でした)。int

var xs = new[] { 1, 2, 3 };
Add(xs...); // doesn't work; syntax error
Add(params xs); // doesn't work; syntax error

1実際のユースケースは異なりますが、この例はそれほど複雑ではないと思いました。

4

5 に答える 5

15

メソッドにはリターンタイプが必要です。

int Add(params int[] xs) {
    return xs.Sum();
}

配列を使用して呼び出すには、メソッド呼び出しに通常の構文を使用します。

int[] xs = new[] { 1, 2, 3 };
var result = Add(xs);
于 2013-02-20T15:30:02.937 に答える
2

キーワードはparams基本的に、ほんの少しの糖衣構文を利用することを可能にします。それはコンパイラにそれが見たときにそれを伝えます

Add(1, 2, 3);

それをに変換する必要があります

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

したがって、コードからこれを行うために、特別なことをする必要はありません。

 int[] parameters = new int[] { ... }
 results = Add(parameters);

詳細については、ドキュメントを参照してください。

于 2013-02-20T15:33:34.283 に答える
0

私の知る限り、通常のメソッドと同じように配列を使用して呼び出すことができます。

Add(xs);

特別なことはなくparams、メソッド呼び出しのキーワードもドットもありません。

于 2013-02-20T15:30:19.270 に答える
0
static void Main(string[] args)
{
    int[] tmp =  {1, 2};
    var sum = Add(tmp);
}
public static int Add(params int[] xs)
{
    return xs.Sum();
}

うまくいくはずです。

于 2013-02-20T15:31:41.733 に答える
0

Javaのようなものであれば、配列を引数としてメソッドを呼び出すことができます。

この機能は、特にvarargタイプの1つが配列でもある場合に、varargsを危険なものにする原因でもあります...

于 2013-02-20T15:34:14.813 に答える