Övning – Metoder med valfria parametrar
C Sharp-språket tillåter användning av namngivna och valfria parametrar. Med de här typerna av parametrar kan du välja vilka argument du vill ange för metoden, så att du inte är begränsad till den struktur som definieras i metodsignaturen.
Med namngivna argument kan du ange värdet för en parameter med dess namn i stället för position. Med valfria parametrar kan du utelämna dessa argument när du anropar metoden.
I den här övningen får du lära dig hur du använder både namngivna och valfria parametrar.
Skapa ett RSVP-program
I den här uppgiften skapar du ett kort program där gäster kan OSA till ett evenemang. Gästerna ska ange antal personer och eventuella allergier. Du lägger också till alternativet för att begränsa RSVP:er till en gästlista med endast inbjudan.
Ta bort befintlig kod från föregående övningar i Visual Studio Code-redigeraren.
Skriv följande kod i Visual Studio Code-redigeraren:
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]); } }I den här koden skapar du variabler för att lagra gästlistan och rsvps. Metoden
RSVPlägger till gästinformation i listan ochShowRSVPsmetoden visar totalt antal RSVP:er med hjälp av flikrymningssekvensen för att separera gästinformation.Ange följande kod i
RSVPmetoden för att söka i gästlistan: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; } }I den här koden kontrollerar du om det angivna namnet är lika med något av namnen i gästlistan. Om en träff hittas ställer du in
foundtill true och bryter ut urforeach-loopen. Omfoundär falskt visar du ett meddelande och använder nyckelordetreturnför att avsluta metoden.Anropa din metod genom att lägga till följande kod ovanför metodsignaturen
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();Spara och kör koden för att observera följande utdata:
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
Använda namngivna argument
När du anropar en metod som accepterar många parametrar kan det vara svårt att förstå vad argumenten representerar. Om du använder namngivna argument kan du förbättra kodens läsbarhet. Använd ett namngivet argument genom att ange parameternamnet följt av argumentvärdet. I den här uppgiften övar du på att använda namngivna argument.
Leta upp följande kodrad:
RSVP("Linh", 2, "none", false);Uppdatera metodanropet på följande sätt:
RSVP(name: "Linh", partySize: 2, allergies: "none", inviteOnly: false);Observera att du anger namnet på parametern följt av ett kolon och värdet. Den här syntaxen definierar ett namngivet argument. Det är inte nödvändigt att namnge alla argument. Följande syntax är till exempel också giltig:
RSVP("Linh", 2, allergies: "none", inviteOnly: false);RSVP("Linh", partySize: 2, "none", false);Namngivna argument, när de används med positionsargument, är giltiga om de används i rätt position. Namngivna argument är också giltiga så länge de inte följs av några positionsargument. Till exempel skulle att inkludera
"Linh"och2i slutet vara ogiltigt:RSVP(allergies: "none", inviteOnly: false, "Linh", 2);Om du angav den här koden får du följande fel:
Named argument 'allergies' is used out-of-position but is followed by an unnamed argumentLeta upp följande kodrad:
RSVP("Tony", 1, "Jackfruit", true);Uppdatera metodanropet på följande sätt:
RSVP("Tony", inviteOnly: true, allergies: "Jackfruit", partySize: 1);Observera att de namngivna argumenten inte behöver visas i den ursprungliga ordningen. Det namnlösa argumentet
Tonyär dock ett positionsargument och måste visas i matchande position.Spara och kör koden för att observera följande utdata:
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 fruitObservera att användning av namngivna argument inte ändrar utdata.
Deklarera valfria parametrar
En parameter blir valfri när den tilldelas ett standardvärde. Om en valfri parameter utelämnas från argumenten används standardvärdet när metoden körs. I det här steget gör du parametrarna partySize, allergies och inviteOnly valfria.
Om du vill definiera valfria parametrar uppdaterar du metodsignaturen
RSVPenligt följande:void RSVP(string name, int partySize = 1, string allergies = "none", bool inviteOnly = true)Ta en stund att observera syntaxen. Parametrarna avgränsas fortfarande med kommatecken, men parametrarna
partySize,allergiesochinviteOnlytilldelas alla ett värde var.Därefter uppdaterar du anropen till
RSVPför att tillämpa de valfria parametrarna.Uppdatera koden till följande:
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);Observera att namnet aldrig utelämnas i varje metodanrop. När en metod anropas måste alla obligatoriska argument alltid inkluderas. Valfria argument kan dock utelämnas.
I den här koden har du tagit bort argumenten
1, "none", truefrån Rebeccas rsvp. Eftersom dessa argument matchar standardvärdet är resultatet av Rebeccas rsvp detsamma.Du tog bort
inviteOnlyargumentet från Nadias rsvp. Eftersom standardvärdet förinviteOnlyärtrue, är resultatet av Nadias RSVP detsamma.Du tog bort
partySizeargumentet från Tonys rsvp. Om Tony hade en inbjudan skulle standardvärdetpartySizeför användas i RSVP.Du tog bort
allergiesargumentet från både Linh och Noors rsvps. Deras rsvps visar standardvärdetnoneför "Allergier".Spara och kör koden för att observera följande utdata:
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 fruitObservera att standardvärdena används i stället för utelämnade argument, till exempel
partySizeochallergies.
Sammanfattning
Här är vad du har lärt dig om valfria och namngivna argument hittills:
- Parametrar görs valfria genom att ange ett standardvärde i metodsignaturen.
- Namngivna argument anges med parameternamnet följt av ett kolon och argumentvärdet.
- När du kombinerar namngivna argument och positionsargument måste du använda rätt ordning på parametrarna.