The paramsparameter pengubah memberikan penelepon sintaks pintas untuk melewati beberapa argumen untuk sebuah metode. Ada dua cara untuk memanggil metode dengan paramsparameter:
1) Memanggil dengan array tipe parameter, dalam hal ini paramskata kunci tidak berpengaruh dan array tersebut diteruskan langsung ke metode:
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) Atau, memanggil dengan daftar argumen yang diperpanjang, dalam hal ini kompilator akan secara otomatis membungkus daftar argumen dalam larik sementara dan meneruskannya ke metode:
// Foo receives a temporary array containing the list of arguments.
Foo( "1", "2" );
// This is equivalent to:
object[] temp = new[] { "1", "2" );
Foo( temp );
Untuk meneruskan larik objek ke metode dengan params object[]parameter " ", Anda dapat:
1) Buat array pembungkus secara manual dan teruskan langsung ke metode, seperti yang disebutkan oleh lassevk :
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2) Atau, berikan argumen ke object, seperti yang disebutkan oleh Adam , dalam hal ini kompilator akan membuat array pembungkus untuk Anda:
Foo( (object)array ); // Equivalent to calling convention 2.
Akan tetapi, jika tujuan metode ini adalah untuk memproses beberapa larik objek, mungkin lebih mudah untuk mendeklarasikannya dengan params object[][]parameter " " eksplisit . Ini akan memungkinkan Anda untuk melewatkan beberapa array sebagai argumen:
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 );
Sunting: Raymond Chen menjelaskan perilaku ini dan bagaimana kaitannya dengan spesifikasi C # di posting baru .