Der paramsParametermodifikator gibt Aufrufern eine Verknüpfungssyntax zum Übergeben mehrerer Argumente an eine Methode. Es gibt zwei Möglichkeiten, eine Methode mit einem paramsParameter aufzurufen :
1) Aufruf mit einem Array vom Parametertyp. In diesem Fall hat das paramsSchlüsselwort keine Auswirkung und das Array wird direkt an die Methode übergeben:
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) Oder rufen Sie mit einer erweiterten Liste von Argumenten auf. In diesem Fall wird der Compiler die Liste der Argumente automatisch in ein temporäres Array einschließen und diese an die Methode übergeben:
// Foo receives a temporary array containing the list of arguments.
Foo( "1", "2" );
// This is equivalent to:
object[] temp = new[] { "1", "2" );
Foo( temp );
Um ein Objektarray an eine Methode mit einem " params object[]" -Parameter zu übergeben, können Sie entweder:
1) Erstellen Sie manuell ein Wrapper-Array und übergeben Sie dieses direkt an die Methode, wie von lassevk erwähnt :
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2) Oder setzen Sie das Argument auf object, wie von Adam erwähnt . In diesem Fall erstellt der Compiler das Wrapper-Array für Sie:
Foo( (object)array ); // Equivalent to calling convention 2.
Wenn das Ziel der Methode jedoch darin besteht, mehrere Objektarrays zu verarbeiten, ist es möglicherweise einfacher, sie mit einem expliziten " params object[][]" -Parameter zu deklarieren . Auf diese Weise können Sie mehrere Arrays als Argumente übergeben:
void Foo( params object[][] arrays ) {
foreach( object[] array in arrays ) {
// process array
}
}
...
Foo( new[] { "1", "2" }, new[] { "3", "4" } );
// Equivalent to:
object[][] arrays = new[] {
new[] { "1", "2" },
new[] { "3", "4" }
};
Foo( arrays );
Bearbeiten: Raymond Chen beschreibt dieses Verhalten und wie es sich auf die C # -Spezifikation in bezieht einem neuen Beitrag .