17.5.1.4 Parameter Arrays
Ein Parameterarray Argument in einem von zwei Arten in einem Methodenaufruf ermöglicht angegeben werden:
• Das Argument für einen Parameter Array gegeben kann eine sein, einzelner Ausdruck eines Typs, der implizit konvertierbar (§13.1) in den Parameter Array-Typ ist. In diesem Fall wirkt das Parameter-Array genau wie ein Wert-Parameter .
• Alternativ kann der Aufruf angeben null oder mehr Argumente für den Parameter-Array, wobei jedes Argument Ausdruck einer Art ist, die implizit umwandelbar ist (§13.1) zum Elementtyp des Parameter-Array. In diesem Fall erzeugt der Aufruf eine Instanz des Parameterarray Typs mit einer Länge bis die Anzahl der Argumente entspricht, initialisiert die Elemente der Array-Instanz mit den Argumentwerten gegeben, und verwendet die neu erstellten Array Instanz als das eigentliche Argument.
Im gleichen Abschnitt ist ein Beispiel gegeben:
using System;
class Test
{
static void F(params int[] args) {
Console.Write("Array contains {0} elements:", args.Length);
foreach (int i in args)
Console.Write(" {0}", i);
Console.WriteLine();
}
static void Main() {
int[] arr = {1, 2, 3};
F(arr);
F(10, 20, 30, 40);
F();
}
}
erzeugt die Ausgabe
Array contains 3 elements: 1 2 3 Array
contains 4 elements: 10 20 30 40 Array
contains 0 elements:
Dieses Beispiel veranschaulicht das erwartete Verhalten: leeres Array
MS auch diese Information verbergen, ich den params Abschnitt geprüft ;-) Vielen Dank. – greenoldman
Eine Problemumgehung für dieses Problem: Erstellen Sie eine überladene Version von Konstruktor/Methode mit Nullargumenten. Beispiel: 'void foo()' und 'void foo (params int [] x)' – kevinarpe
Danke. Hier ist ein neuer Link, der auf das verweist, worauf Anthoney sich bezieht. [Argumentlisten -> Laufzeitauswertung von Argumentlisten] (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions#run-time-evaluation-of -Argument-Listen) – Darrelk