私は興味がありますし、うまくいけば誰かがこれを体現することができます - しかし、なぜ 'params'を取るC#関数は配列でなければなりませんか?配列を必要とする可変長関数の設計上の決定は何ですか?
私は、パラメータリスト内のオブジェクトが配列に入力されるが、誰かが未定義の配列オブジェクトを取り込む可変関数を作成したい場合はどうなるだろうか?まっすぐ、それは数字の異なる量で取ることができます
例えば、この機能を取る...
private Int32 Sum(params Int32[] numbers)
{
return numbers.Sum(); // Using LINQ here to sum
}
プリティ - 例えば...
Int32 x = Sum(1);
Int32 y = Sum(1, 2);
Int32 z = Sum(1, 2, 3);
は、今、私がしたいと言うことができます異なる量のInteger配列を取り、すべての数を合計する関数を作成します。私の知る限り承知していますように私はボクシングを検討する必要があります...
private Int32 SumArrays(params Object[] numbers)
{
Int32 total = 0;
foreach (Object o in numbers)
{
Int32[] array = (Int32[])o;
total += array.Sum();
}
return total;
}
その後、
この背後にある理由は何だったInt32[] arr1 = new Int32[] { 1, 2, 3 };
Int32[] arr2 = new Int32[] { 1, 2, 3, 4 };
Int32[] arr3 = new Int32[] { 1, 2, 3, 4, 5 };
Int32 x = SumArrays((Object)arr1, (Object)arr2);
Int32 y = SumArrays((Object)arr1, (Object)arr2, (Object)arr3);
...のように使用することができましたか?なぜこれはこれまで実装されていた配列変数ではないのですか?例えばparams Int32
など?
実際に配列の配列ではないので、ああクールdidntはそれを知っていますが、なぜこの場合ですか?配列のリストだけです。なぜなら、数値のリストをInt32で解析するのではなく、配列を調べるのにInt32 []を使うのはなぜですか? –
@Chalkey:はいそれは配列の配列です。デバッガでargsを調べると、args = {int [2] []}のようになります。 args配列の各要素はint配列です。 –