มีทางเลือก C # สำหรับพารามิเตอร์ vararg ของ Java หรือไม่?


93

ฉันทำงานบน Java และยังใหม่กับเทคโนโลยี. Net

เป็นไปได้หรือไม่ที่จะประกาศฟังก์ชันใน C # ซึ่งรับพารามิเตอร์อินพุตตัวแปร

มีไวยากรณ์ C # คล้ายกับไวยากรณ์ Java ต่อไปนี้หรือไม่?

void f1(String... a)

2
หากคำตอบใด ๆ ด้านล่างตอบคำถามของคุณวิธีการทำงานของ Stack Overflow คุณจะ "ยอมรับ" คำตอบโดยคลิกเครื่องหมายถูกที่อยู่ข้างๆ รายละเอียดที่นี่
TJ Crowder

คำตอบ:


150

ใช่ C # มีค่าเทียบเท่าพารามิเตอร์ varargs เรียกว่าอาร์เรย์พารามิเตอร์และนำมาใช้กับparamsตัวปรับแต่ง:

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

จากนั้นโทรด้วย:

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

เช่นเดียวกับ Java เป็นเพียงพารามิเตอร์สุดท้ายซึ่งอาจแตกต่างกันไปเช่นนี้ โปรดทราบว่า (เช่นเดียวกับ Java) พารามิเตอร์ของparams object[] objectsอาจทำให้เกิดความสับสนได้ง่ายเนื่องจากคุณต้องจำไว้ว่าอาร์กิวเมนต์ประเภทเดียวobject[]ถูกกำหนดให้ถูกรวมอีกครั้งหรือไม่ ในทำนองเดียวกันสำหรับประเภทที่เป็นโมฆะคุณต้องจำไว้ว่าอาร์กิวเมนต์เดียวของnullจะถือว่าเป็นการอ้างอิงอาร์เรย์หรือองค์ประกอบอาร์เรย์เดียว (ฉันคิดว่าคอมไพเลอร์จะสร้างอาร์เรย์เท่านั้นหากจำเป็น แต่ฉันมักจะเขียนโค้ดซึ่งทำให้ฉันไม่ต้องจำสิ่งนั้น)


+1 แม้ว่าฉันจะพูดถึงสิ่งนั้น (เช่นเดียวกับคุณสมบัติภาษาอื่น ๆ ) ก็ไม่ควรใช้ในทางที่ผิด
Federico Berasategui

16
@HighCore: ถ้าคุณจะพูดถึงมันเกี่ยวกับคุณสมบัติภาษาอื่น ๆ ก็คงไม่คุ้มค่าที่จะกล่าวถึง :)
Jon Skeet

2
@hvd: เนื่องจาก OP ดูเหมือนจะเป็นผู้เริ่มต้นฉันไม่ต้องการไปที่อาร์กิวเมนต์ที่มีชื่อพารามิเตอร์ทางเลือก ฯลฯ ที่นี่ ฉันเห็นจุดที่คุณกำลังพยายามสร้าง แต่ฉันคิดว่ามันจะเพิ่มความสับสนมากกว่าแสงสว่างในตอนนี้
Jon Skeet

37

ดูพารามิเตอร์ (อ้างอิง C #)

คีย์เวิร์ด params ช่วยให้คุณระบุเมธอดพารามิเตอร์ที่รับอาร์กิวเมนต์จำนวนตัวแปร

คุณสามารถส่งรายการอาร์กิวเมนต์ที่คั่นด้วยเครื่องหมายจุลภาคของประเภทที่ระบุในการประกาศพารามิเตอร์หรืออาร์เรย์ของอาร์กิวเมนต์ประเภทที่ระบุ คุณยังไม่สามารถส่งข้อโต้แย้งได้

ไม่อนุญาตให้ใช้พารามิเตอร์เพิ่มเติมหลังจากคีย์เวิร์ด params ในการประกาศเมธอดและอนุญาตให้ใช้คีย์เวิร์ด params เพียงคีย์เวิร์ดเดียวในการประกาศเมธอด

ดังที่แสดงในตัวอย่างวิธีนี้ถูกประกาศเป็น

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

และใช้เป็น

UseParams(1, 2, 3, 4);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.