Ich bin neugierig und hoffentlich jemand kann etwas Licht auf diese - aber warum die C#-Funktionen, die "Params" nehmen müssen ein Array sein?
Ich verstehe, dass die Objekte in der Parameterliste in ein Array eingegeben werden, aber was ist, wenn jemand eine variadische Funktion erstellen möchte, die eine undefinierte Anzahl von Array-Objekten aufnimmt?
Nehmen Sie zum Beispiel diese Funktion...
private Int32 Sum(params Int32[] numbers)
{
return numbers.Sum(); // Using LINQ here to sum
}
Ziemlich einfach, es kann eine unterschiedliche Anzahl von Zahlen aufgenommen werden - zum Beispiel...
Int32 x = Sum(1);
Int32 y = Sum(1, 2);
Int32 z = Sum(1, 2, 3);
Sagen wir nun, ich möchte eine Funktion erstellen, die eine unterschiedliche Anzahl von Integer-Arrays aufnimmt und alle Zahlen summiert. Soweit ich weiß, müsste ich Boxing berücksichtigen...
private Int32 SumArrays(params Object[] numbers)
{
Int32 total = 0;
foreach (Object o in numbers)
{
Int32[] array = (Int32[])o;
total += array.Sum();
}
return total;
}
Die dann wie folgt verwendet werden könnten...
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);
Was war der Grund für diese Entscheidung? Warum wurde dies nicht einfach als eine einzelne Nicht-Array-Variable implementiert? Wie zum Beispiel params Int32
?