คืนค่าเวทย์มนตร์โยนข้อยกเว้นหรือคืนเท็จเมื่อล้มเหลว?
บางครั้งฉันต้องเขียนวิธีหรือคุณสมบัติสำหรับไลบรารี่คลาสที่ไม่ได้ยอดเยี่ยมที่จะไม่มีคำตอบจริง แต่เป็นความล้มเหลว ไม่สามารถระบุบางสิ่ง, ไม่พร้อมใช้, ไม่พบ, ไม่สามารถทำได้ในปัจจุบันหรือไม่มีข้อมูลเพิ่มเติม ฉันคิดว่ามีวิธีแก้ปัญหาสามประการที่เป็นไปได้สำหรับสถานการณ์ที่ไม่เป็นพิเศษเช่นนี้เพื่อระบุความล้มเหลวใน C # 4: คืนค่าเวทย์มนตร์ที่ไม่มีความหมายเป็นอย่างอื่น (เช่นnullและ-1); โยนข้อยกเว้น (เช่นKeyNotFoundException); ส่งคืนfalseและระบุค่าส่งคืนจริงในoutพารามิเตอร์ (เช่นDictionary<,>.TryGetValue) ดังนั้นคำถามคือ: ในสถานการณ์ใดที่ฉันไม่ควรพลาด และถ้าฉันไม่ควรโยน: เมื่อส่งคืนค่าเวทมนตร์ที่อ้างถึงข้างต้นใช้Try*วิธีการที่มีoutพารามิเตอร์หรือไม่ (สำหรับฉันoutพารามิเตอร์ดูเหมือนว่าสกปรกและใช้งานได้อย่างถูกต้องมากกว่า) ฉันกำลังมองหาคำตอบที่เป็นจริงเช่นคำตอบที่เกี่ยวข้องกับแนวทางการออกแบบ (ฉันไม่รู้อะไรเกี่ยวกับTry*วิธีการ) ความสามารถในการใช้งาน (เมื่อฉันขอสิ่งนี้สำหรับห้องสมุดคลาส) ความสอดคล้องกับ BCL และความสามารถในการอ่าน ในไลบรารีคลาสพื้นฐาน. NET Framework ใช้วิธีการทั้งสาม: คืนค่าเวทย์มนตร์ที่ไม่มีความหมายเป็นอย่างอื่น: Collection<T>.IndexOf ผลตอบแทน -1 StreamReader.Read ผลตอบแทน -1 Math.Sqrt ส่งกลับ NaN Hashtable.Item ผลตอบแทนที่เป็นโมฆะ; โยนข้อยกเว้น: Dictionary<,>.Item พ่น KeyNotFoundException Double.Parseพ่น FormatException; …