Java'nın vararg parametrelerine bir C # alternatifi var mı?


93

Java üzerinde çalıştım ve .Net teknolojisinde yeni

Değişken girdi parametrelerini kabul eden C # 'da bir işlev bildirmek mümkün mü

Aşağıdaki Java sözdizimine benzer herhangi bir C # sözdizimi var mı?

void f1(String... a)

2
Aşağıdaki cevaplar Varsa cevap soru, yığın taşması çalışma şeklini, sen yanındaki onay işaretini tıklayarak cevabını "kabul et" diye; ayrıntılar burada .
TJ Crowder

Yanıtlar:


150

Evet, C # eşdeğeri varargs parametrelerine sahiptir. Parametre dizileri olarak adlandırılırlar ve paramsdeğiştiriciyle birlikte sunulurlar :

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

O halde şu numarayı arayın:

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

Tıpkı Java'da olduğu gibi, bu şekilde değişebilen yalnızca son parametredir. params object[] objectsTek bir bağımsız değişkenin object[]yeniden sarılıp sarılmayacağını hatırlamanız gerektiğinden, bir parametresinin (Java'da olduğu gibi) kolayca kafa karışıklığına neden olabileceğini unutmayın . Benzer şekilde, herhangi bir boş değer nullatanabilir tür için, tek bir bağımsız değişkeninin bir dizi başvurusu mu yoksa tek bir dizi öğesi olarak mı ele alınacağını hatırlamanız gerekir . ( Derleyicinin yalnızca gerekiyorsa diziyi oluşturduğunu düşünüyorum , ancak bunu hatırlamak zorunda kalmamı önleyen kod yazma eğilimindeyim.)


+1, ancak bundan bahsetmeme rağmen (hemen hemen diğer dil özelliklerinde olduğu gibi), bu kötüye kullanılmamalıdır.
Federico Berasategui

16
@HighCore: Hemen hemen başka herhangi bir dil özelliğinden bahsedecekseniz, muhtemelen bahsetmeye değmez :)
Jon Skeet 13

2
@hvd: OP'nin başlangıç ​​seviyesindeymiş gibi göründüğünü düşünürsek, burada adlandırılmış argümanlara, isteğe bağlı parametrelere vb. girmeyi tercih etmiyorum. Vurgulamaya çalıştığınız noktayı görüyorum, ama bence şu anda ışıktan daha fazla kafa karışıklığı ekleyecektir.
Jon Skeet

37

Parametrelere bir göz atın (C # Referansı)

Params anahtar sözcüğü, değişken sayıda bağımsız değişken alan bir yöntem parametresi belirtmenize olanak tanır.

Parametre bildiriminde belirtilen türde argümanların virgülle ayrılmış bir listesini veya belirtilen türde bir argüman dizisi gönderebilirsiniz. Ayrıca hiçbir argüman gönderemezsiniz.

Bir yöntem bildiriminde params anahtar sözcüğünden sonra ek parametrelere izin verilmez ve bir yöntem bildiriminde yalnızca bir params anahtar sözcüğüne izin verilir.

Örnekte gösterildiği gibi, yöntem şu şekilde bildirilmiştir:

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

ve olarak kullanıldı

UseParams(1, 2, 3, 4);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.