คำถามติดแท็ก optional-parameters

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

19
ฉันจะข้ามอาร์กิวเมนต์ที่เป็นทางเลือกในการเรียกใช้ฟังก์ชันได้อย่างไร
ตกลงฉันลืมวิธีข้ามอาร์กิวเมนต์ใน PHP ไปโดยสิ้นเชิง บอกว่าฉันมี: function getData($name, $limit = '50', $page = '1') { ... } ฉันจะเรียกฟังก์ชันนี้อย่างไรเพื่อให้พารามิเตอร์กลางรับค่าเริ่มต้น (เช่น '50') getData('some name', '', '23'); ข้างต้นจะถูกต้องหรือไม่? ดูเหมือนจะไม่สามารถใช้งานได้

13
คุณควรประกาศวิธีการโดยใช้โอเวอร์โหลดหรือพารามิเตอร์เสริมใน C # 4.0 หรือไม่?
ฉันกำลังดูการพูดคุยของ Anders เกี่ยวกับ C # 4.0 และดูตัวอย่างของ C # 5.0และทำให้ฉันนึกถึงเมื่อพารามิเตอร์ที่เป็นทางเลือกมีอยู่ใน C # จะเป็นวิธีที่แนะนำในการประกาศวิธีการที่ไม่จำเป็นต้องระบุพารามิเตอร์ทั้งหมด ยกตัวอย่างเช่นบางอย่างเช่นFileStreamชั้นจะมีประมาณสิบห้าก่อสร้างงานแตกต่างกันซึ่งสามารถแบ่งออกเป็น 'ครอบครัว' ตรรกะเช่นคนที่อยู่ด้านล่างจากสตริงคนจากและคนที่มาจากที่IntPtrSafeFileHandle FileStream(string,FileMode); FileStream(string,FileMode,FileAccess); FileStream(string,FileMode,FileAccess,FileShare); FileStream(string,FileMode,FileAccess,FileShare,int); FileStream(string,FileMode,FileAccess,FileShare,int,bool); สำหรับฉันแล้วดูเหมือนว่ารูปแบบประเภทนี้สามารถทำให้ง่ายขึ้นได้โดยมีตัวสร้างสามตัวแทนและใช้พารามิเตอร์ที่เป็นทางเลือกสำหรับพารามิเตอร์ที่สามารถเป็นค่าเริ่มต้นได้ซึ่งจะทำให้ตระกูลต่างๆของตัวสร้างมีความแตกต่างกันมากขึ้น [หมายเหตุ: ฉันรู้ว่าการเปลี่ยนแปลงนี้จะไม่มี ทำใน BCL ฉันกำลังพูดถึงสมมุติฐานสำหรับสถานการณ์ประเภทนี้] คุณคิดอย่างไร? จาก C # 4.0 จะเหมาะสมกว่าหรือไม่ที่จะทำให้กลุ่มตัวสร้างและวิธีการที่เกี่ยวข้องอย่างใกล้ชิดเป็นวิธีการเดียวที่มีพารามิเตอร์เสริมหรือมีเหตุผลที่ดีที่จะยึดติดกับกลไกการโอเวอร์โหลดแบบดั้งเดิม

4
วิธีหนึ่งจะทำการปิดทางเลือกในอย่างรวดเร็วได้อย่างไร?
ฉันพยายามประกาศอาร์กิวเมนต์ใน Swift ซึ่งจะปิดทางเลือก ฟังก์ชันที่ฉันประกาศมีลักษณะดังนี้: class Promise { func then(onFulfilled: ()->(), onReject: ()->()?){ if let callableRjector = onReject { // do stuff! } } } แต่ Swift บ่นว่า "Bound value in a conditional must be an Optional type" ซึ่งมีการประกาศ "if let"

10
วิธีตรวจสอบว่ามีการตั้งค่าพารามิเตอร์ฟังก์ชันเสริมหรือไม่
มีวิธีง่ายๆใน Python ในการตรวจสอบว่าค่าของพารามิเตอร์ที่เป็นทางเลือกนั้นมาจากค่าเริ่มต้นหรือเนื่องจากผู้ใช้ตั้งค่าไว้อย่างชัดเจนในการเรียกใช้ฟังก์ชันหรือไม่

8
ไม่สามารถใช้ String.Empty เป็นค่าเริ่มต้นสำหรับพารามิเตอร์ที่เป็นทางเลือก
ฉันกำลังอ่านC # ที่มีประสิทธิภาพโดย Bill Wagner ในรายการ 14 - ลดลอจิกการเริ่มต้นที่ซ้ำกันเขาแสดงตัวอย่างต่อไปนี้ของการใช้คุณสมบัติพารามิเตอร์ทางเลือกใหม่ในตัวสร้าง: public MyClass(int initialCount = 0, string name = "") สังเกตว่าเขาใช้""แทนstring.Empty. เขาแสดงความคิดเห็น: คุณจะสังเกตเห็น [ในตัวอย่างด้านบน] ว่าตัวสร้างที่สองระบุ "" สำหรับค่าเริ่มต้นของพารามิเตอร์nameแทนที่จะเป็นแบบธรรมเนียมstring.Emptyพารามิเตอร์มากกว่าจารีตประเพณีมากขึ้นนั่นเป็นเพราะstring.Emptyไม่ใช่ค่าคงที่เวลาคอมไพล์ เป็นคุณสมบัติคงที่ที่กำหนดไว้ในคลาสสตริง เนื่องจากไม่ใช่ค่าคงที่ในการคอมไพล์คุณจึงไม่สามารถใช้เป็นค่าเริ่มต้นสำหรับพารามิเตอร์ได้ หากเราไม่สามารถใช้ไฟล์ string.Emptyแตติกได้ในทุกสถานการณ์นั่นจะไม่ทำให้จุดประสงค์ของมันเสียไปหรือ? ฉันคิดว่าเราจะใช้มันเพื่อให้แน่ใจว่าเรามีวิธีการอ้างถึงสตริงว่างโดยไม่ขึ้นกับระบบ ความเข้าใจของฉันผิดหรือเปล่า? ขอบคุณ. อัปเดต เพียงติดตามความคิดเห็น ตาม MSDN: พารามิเตอร์ทางเลือกแต่ละตัวมีค่าดีฟอลต์เป็นส่วนหนึ่งของนิยาม หากไม่มีการส่งอาร์กิวเมนต์สำหรับพารามิเตอร์นั้นจะใช้ค่าเริ่มต้น ค่าเริ่มต้นต้องเป็นค่าคงที่ จากนั้นเราจะไม่สามารถใช้System.Environment.NewLineอย่างใดอย่างหนึ่งหรือใช้อ็อบเจ็กต์ที่สร้างอินสแตนซ์ใหม่เป็นค่าเริ่มต้น ฉันยังไม่ได้ใช้ VS2010 และมันก็น่าผิดหวัง!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.