แบบฝึกหัด - วิธีการที่มีพารามิเตอร์ทางเลือก

เสร็จสมบูรณ์เมื่อ

ภาษา C Sharp อนุญาตให้ใช้พารามิเตอร์ที่มีชื่อและเป็นทางเลือก พารามิเตอร์ชนิดเหล่านี้ช่วยให้คุณเลือกอาร์กิวเมนต์ที่คุณต้องการใส่ในเมธอด ดังนั้นคุณจึงไม่จํากัดโครงสร้างที่กําหนดไว้ในลายเซ็นของวิธีการ

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

ในแบบฝึกหัดนี้ คุณจะได้เรียนรู้วิธีการใช้ทั้งพารามิเตอร์ที่มีชื่อและพารามิเตอร์ทางเลือก

สร้างแอปพลิเคชัน RSVP

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

  1. ใน Visual Studio Code Editor ให้ลบโค้ดที่มีอยู่ออกจากแบบฝึกหัดก่อนหน้า

  2. พิมพ์โค้ดต่อไปนี้ลงใน Visual Studio Code Editor:

    string[] guestList = {"Rebecca", "Nadia", "Noor", "Jonte"};
    string[] rsvps = new string[10];
    int count = 0;
    
    void RSVP(string name, int partySize, string allergies, bool inviteOnly) 
    {
        if (inviteOnly)
        {
            // search guestList before adding rsvp
        }
    
        rsvps[count] = $"Name: {name}, \tParty Size: {partySize}, \tAllergies: {allergies}";
        count++;
    }
    
    void ShowRSVPs()
    {
        Console.WriteLine("\nTotal RSVPs:");
        for (int i = 0; i < count; i++)
        {
            Console.WriteLine(rsvps[i]);
        }
    }
    

    ในโค้ดนี้ คุณสร้างตัวแปรเพื่อจัดเก็บรายการผู้เยี่ยมชมและ rsvps เม RSVP ธอด จะผนวกข้อมูลผู้เยี่ยมชมไปยังรายการ และ ShowRSVPs เมธอดจะแสดง RSVP ทั้งหมดโดยใช้ลําดับการหลีกเลี่ยงแท็บเพื่อแยกข้อมูลผู้เยี่ยมชม

  3. ป้อนรหัสต่อไปนี้ใน RSVP วิธีการ เพื่อค้นหารายชื่อผู้เยี่ยมชม:

    if (inviteOnly)
    {
        bool found = false;
        foreach (string guest in guestList)
        {
            if (guest.Equals(name)) {
                found = true;
                break;
            }
        }
        if (!found)
        {
            Console.WriteLine($"Sorry, {name} is not on the guest list");
            return;
        }
    }
    

    ในรหัสนี้คุณจะตรวจสอบว่าชื่อที่กําหนดเท่ากับชื่อใด ๆ ในรายชื่อผู้เยี่ยมชมหรือไม่ ถ้าพบค่าที่ตรงกัน คุณตั้งค่า found เป็นจริงและแยกออกจาก foreach รอบ หาก found เป็นเท็จ คุณต้องแสดงข้อความและใช้ return คําสําคัญเพื่อยุติวิธีการ

  4. เรียกวิธีการของคุณโดยการเพิ่มรหัสต่อไปนี้เหนือ RSVP ลายเซ็นวิธีการ:

    RSVP("Rebecca", 1, "none", true);
    RSVP("Nadia", 2, "Nuts", true);
    RSVP("Linh", 2, "none", false);
    RSVP("Tony", 1, "Jackfruit", true);
    RSVP("Noor", 4, "none", false);
    RSVP("Jonte", 2, "Stone fruit", false);
    ShowRSVPs();
    
  5. บันทึกและเรียกใช้โค้ดเพื่อสังเกตเอาต์พุตต่อไปนี้:

    Sorry, Tony is not on the guest list
    
    Total RSVPs:
    Name: Rebecca,  Party Size: 1,  Allergies: none
    Name: Nadia,    Party Size: 2,  Allergies: Nuts
    Name: Linh,     Party Size: 2,  Allergies: none
    Name: Noor,     Party Size: 4,  Allergies: none
    Name: Jonte,    Party Size: 2,  Allergies: Stone fruit
    

ใช้อาร์กิวเมนต์ที่มีชื่อ

เมื่อเรียกใช้เมธอด ที่รับพารามิเตอร์จํานวนมาก อาจเป็นเรื่องยุ่งยากในการทําความเข้าใจสิ่งที่อาร์กิวเมนต์แสดง การใช้อาร์กิวเมนต์ที่มีชื่อสามารถทําให้โค้ดของคุณอ่านง่ายขึ้น ใช้อาร์กิวเมนต์ที่มีชื่อโดยระบุชื่อพารามิเตอร์ตามด้วยค่าอาร์กิวเมนต์ ในงานนี้ คุณจะฝึกการใช้อาร์กิวเมนต์ที่มีชื่อ

  1. ค้นหาบรรทัดของโค้ดต่อไปนี้: RSVP("Linh", 2, "none", false);

  2. อัปเดตการเรียกใช้เมธอด ดังนี้:

    RSVP(name: "Linh", partySize: 2, allergies: "none", inviteOnly: false);
    

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

    RSVP("Linh", 2, allergies: "none", inviteOnly: false); RSVP("Linh", partySize: 2, "none", false);

    อาร์กิวเมนต์ที่มีชื่อ เมื่อใช้กับอาร์กิวเมนต์ตําแหน่งจะใช้ได้หากใช้ในตําแหน่งที่ถูกต้อง อาร์กิวเมนต์ที่มีชื่อจะถูกต้องตราบใดที่ไม่ได้ตามด้วยอาร์กิวเมนต์ตําแหน่งใดๆ ตัวอย่างเช่น การรวมถึง "Linh" และ 2 ที่ส่วนท้ายจะไม่ถูกต้อง:

    RSVP(allergies: "none", inviteOnly: false, "Linh", 2);

    ถ้าคุณป้อนรหัสนี้ คุณจะได้รับข้อผิดพลาดต่อไปนี้: Named argument 'allergies' is used out-of-position but is followed by an unnamed argument

  3. ค้นหาบรรทัดของโค้ดต่อไปนี้: RSVP("Tony", 1, "Jackfruit", true);

  4. อัปเดตการเรียกใช้เมธอด ดังนี้:

    RSVP("Tony", inviteOnly: true, allergies: "Jackfruit",  partySize: 1);
    

    โปรดสังเกตว่าอาร์กิวเมนต์ที่มีชื่อไม่จําเป็นต้องปรากฏในลําดับเดิม อย่างไรก็ตาม อาร์กิวเมนต์ Tony ที่ไม่มีชื่อเป็นอาร์กิวเมนต์ตําแหน่ง และต้องปรากฏในตําแหน่งที่ตรงกัน

  5. บันทึกและเรียกใช้โค้ดเพื่อสังเกตเอาต์พุตต่อไปนี้:

    Sorry, Tony is not on the guest list
    
    Total RSVPs:
    Name: Rebecca,  Party Size: 1,  Allergies: none
    Name: Nadia,    Party Size: 2,  Allergies: Nuts
    Name: Linh,     Party Size: 2,  Allergies: none
    Name: Noor,     Party Size: 4,  Allergies: none
    Name: Jonte,    Party Size: 2,  Allergies: Stone fruit
    

    โปรดสังเกตว่าการใช้อาร์กิวเมนต์ที่มีชื่อจะไม่เปลี่ยนแปลงผลลัพธ์

ประกาศพารามิเตอร์ที่เลือกได้

พารามิเตอร์จะกลายเป็น ตัวเลือก เมื่อได้รับการกําหนดค่าเริ่มต้น ถ้าพารามิเตอร์ที่เลือกได้ถูกเว้นไว้จากอาร์กิวเมนต์ ค่าเริ่มต้นจะถูกใช้เมื่อวิธีการปฏิบัติการ ในขั้นตอนนี้ คุณจะสร้างพารามิเตอร์ partySizeallergies และ inviteOnly เป็นทางเลือก

  1. หากต้องการกําหนดพารามิเตอร์ที่เลือกได้ ให้อัปเดตลายเซ็นของ RSVP เมธอด ดังนี้:

    void RSVP(string name, int partySize = 1, string allergies = "none", bool inviteOnly = true)
    

    ใช้เวลาสักครู่เพื่อสังเกตไวยากรณ์ พารามิเตอร์ยังคงถูกคั่นด้วยเครื่องหมายจุลภาค แต่พารามิเตอร์ partySize, allergiesและ inviteOnly จะถูกกําหนดให้กับค่า

    ถัดไป คุณจะอัปเดตการเรียกใช้เพื่อ RSVP นําพารามิเตอร์ที่เลือกได้ไปใช้

  2. อัปเดตโค้ดของคุณเป็นรายการต่อไปนี้:

    RSVP("Rebecca");
    RSVP("Nadia", 2, "Nuts");
    RSVP(name: "Linh", partySize: 2, inviteOnly: false);
    RSVP("Tony", allergies: "Jackfruit", inviteOnly: true);
    RSVP("Noor", 4, inviteOnly: false);
    RSVP("Jonte", 2, "Stone fruit", false);
    

    ในการเรียกใช้แต่ละวิธี ให้สังเกตว่าไม่มีการเว้นชื่อไว้ เมื่อมีการเรียกใช้เมธอด อาร์กิวเมนต์ที่จําเป็นทั้งหมดจะต้องถูกรวมไว้เสมอ อย่างไรก็ตาม สามารถละเว้นอาร์กิวเมนต์ที่เป็นทางเลือกใด ๆ ได้

    ในโค้ดนี้ คุณได้ลบอาร์กิวเมนต์ 1, "none", true ออกจาก rsvp ของ Rebecca เนื่องจากอาร์กิวเมนต์เหล่านี้ตรงกับค่าเริ่มต้น ผลลัพธ์ของ rsvp ของ Rebecca จะเหมือนกัน

    คุณได้เอา inviteOnly อาร์กิวเมนต์ออกจาก rsvp ของ Nadia แล้ว เนื่องจากค่าเริ่มต้นของ inviteOnly คือ trueผลลัพธ์ของ rsvp ของ Nadia จะเหมือนกัน

    คุณได้เอา partySize อาร์กิวเมนต์ออกจาก rsvp ของ Tony แล้ว ถ้า Tony มีคําเชิญ ค่าเริ่มต้นของ partySize จะถูกใช้ใน RSVP

    คุณได้เอา allergies อาร์กิวเมนต์ออกจาก rsvps ของ Linh และ Noor rsvps ของพวกเขาจะแสดงค่าเริ่มต้นของ none สําหรับ "โรคภูมิแพ้"

  3. บันทึกและเรียกใช้โค้ดเพื่อสังเกตเอาต์พุตต่อไปนี้:

    Sorry, Tony is not on the guest list
    
    Total RSVPs:
    Name: Rebecca,  Party Size: 1,  Allergies: none
    Name: Nadia,    Party Size: 2,  Allergies: Nuts
    Name: Linh,     Party Size: 2,  Allergies: none
    Name: Noor,     Party Size: 4,  Allergies: none
    Name: Jonte,    Party Size: 2,  Allergies: Stone fruit
    

    โปรดสังเกตว่าค่าเริ่มต้นจะถูกใช้แทนอาร์กิวเมนต์ที่ถูกละเว้น เช่น partySize และallergies

สรุป

นี่คือสิ่งที่คุณได้เรียนรู้เกี่ยวกับอาร์กิวเมนต์ที่เลือกได้และมีชื่อจนถึงตอนนี้:

  • พารามิเตอร์จะถูกเลือกโดยการตั้งค่าเริ่มต้นในลายเซ็นของวิธีการ
  • อาร์กิวเมนต์ที่มีชื่อจะถูกระบุด้วยชื่อพารามิเตอร์ ตามด้วยเครื่องหมายทวิภาคและค่าอาร์กิวเมนต์
  • เมื่อมีการรวมอาร์กิวเมนต์ที่มีชื่อและตําแหน่ง คุณต้องใช้ลําดับที่ถูกต้องของพารามิเตอร์