Apakah ada alternatif C # untuk parameter vararg Java?


93

Saya telah bekerja di Java dan baru mengenal teknologi .Net

Apakah mungkin untuk mendeklarasikan fungsi di C # yang menerima parameter input variabel

Apakah ada sintaks C # yang mirip dengan sintaks Java berikut?

void f1(String... a)

2
Jika salah satu jawaban di bawah menjawab pertanyaan Anda, seperti cara kerja Stack Overflow, Anda akan "menerima" jawaban dengan mengklik tanda centang di sebelahnya; detailnya di sini .
TJ Crowder

Jawaban:


150

Ya, C # memiliki parameter yang setara dengan varargs. Mereka disebut array parameter , dan diperkenalkan dengan paramspengubah:

public void Foo(int x, params string[] values)

Kemudian sebut dengan:

Foo(10, "hello", "there");

Seperti halnya Java, hanya parameter terakhir yang dapat bervariasi seperti ini. Perhatikan bahwa (seperti pada Java) parameter dari params object[] objectsdapat dengan mudah menyebabkan kebingungan, karena Anda perlu mengingat apakah satu argumen bertipe object[]dimaksudkan untuk digabungkan lagi atau tidak. Demikian juga untuk tipe nullable apa pun, Anda perlu mengingat apakah satu argumen nullakan diperlakukan sebagai referensi array atau elemen array tunggal. (Saya pikir kompiler hanya membuat array jika perlu, tetapi saya cenderung menulis kode yang menghindari saya harus mengingatnya.)


+1, meskipun saya akan menyebutkan bahwa (seperti pada hampir semua fitur bahasa lainnya), ini tidak boleh disalahgunakan.
Federico Berasategui

16
@HighCore: Jika Anda akan menyebutkannya tentang hampir semua fitur bahasa lainnya, mungkin tidak ada gunanya disebutkan :)
Jon Skeet

2
@hvd: Mengingat OP tampaknya pemula, saya lebih suka tidak menggunakan argumen bernama, parameter opsional, dll di sini. Saya melihat poin yang Anda coba buat, tetapi saya pikir itu akan menambah lebih banyak kebingungan daripada cahaya saat ini.
Jon Skeet

37

Lihat params (Referensi C #)

Kata kunci params memungkinkan Anda menentukan parameter metode yang menggunakan sejumlah variabel argumen.

Anda bisa mengirim daftar argumen yang dipisahkan koma dari tipe yang ditentukan dalam deklarasi parameter, atau larik argumen dari tipe yang ditentukan. Anda juga tidak dapat mengirim argumen.

Tidak ada parameter tambahan yang diizinkan setelah kata kunci params dalam deklarasi metode, dan hanya satu kata kunci params yang diizinkan dalam deklarasi metode.

Seperti yang ditunjukkan pada contoh, metode ini dideklarasikan sebagai

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

dan digunakan sebagai

UseParams(1, 2, 3, 4);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.