私は興味があり、うまくいけば誰かがこれに光を当てることができます-しかし、なぜ「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);
ここで、さまざまな量の整数配列を取り、すべての数値を合計する関数を作成したいとします。私の知る限り、ボクシングを検討する必要があります...
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
?