เมื่อแยกวิเคราะห์อินพุตของผู้ใช้นั้นโดยทั่วไปจะแนะนำให้ไม่โยนและจับข้อยกเว้น แต่แทนที่จะใช้วิธีการตรวจสอบ ใน. NET BCL สิ่งนี้จะเป็นความแตกต่างระหว่าง (เช่นint.Parse
การยกเว้นข้อมูลที่ไม่ถูกต้อง) และint.TryParse
(ผลตอบแทนfalse
จากข้อมูลที่ไม่ถูกต้อง)
ฉันกำลังออกแบบของตัวเอง
Foo.TryParse(string s, out Foo result)
วิธีการและฉันไม่แน่ใจเกี่ยวกับค่าตอบแทน ฉันสามารถใช้bool
เหมือนตัวเอง .NET ของTryParse
วิธีการ แต่ที่จะให้ข้อบ่งชี้เกี่ยวกับการไม่มีชนิดของข้อผิดพลาดเกี่ยวกับเหตุผลที่แน่นอนว่าทำไม ไม่สามารถแยกวิเคราะห์เป็นs
Foo
(ตัวอย่างเช่นs
อาจมีวงเล็บที่ไม่ตรงกันหรือจำนวนอักขระที่Bar
ไม่ตรงกันหรือ a โดยไม่ต้องสอดคล้องกันBaz
ฯลฯ )
ในฐานะผู้ใช้ API ฉันไม่ชอบวิธีการที่เพิ่งกลับมาประสบความสำเร็จ / ล้มเหลวบูลีนโดยไม่บอกฉันว่าทำไมการดำเนินการล้มเหลว สิ่งนี้ทำให้การดีบั๊กเป็นเกมที่คาดเดาและฉันไม่ต้องการให้ลูกค้าของห้องสมุดของฉันทำเช่นนั้น
ฉันสามารถคิดถึงวิธีแก้ปัญหามากมายสำหรับปัญหานี้ (รหัสสถานะส่งคืนส่งคืนสตริงข้อผิดพลาดเพิ่มสตริงข้อผิดพลาดเป็นพารามิเตอร์ออก) แต่พวกเขาทั้งหมดมีข้อเสียตามลำดับและฉันต้องการให้สอดคล้องกับอนุสัญญาของ Framework ของ
ดังนั้นคำถามของฉันมีดังนี้
มีวิธีใดใน. NET Framework ที่ (a) แยกวิเคราะห์อินพุตโดยไม่ส่งข้อยกเว้นและ (b) ยังคงส่งกลับข้อมูลรายละเอียดข้อผิดพลาดมากกว่าบูลีนจริง / เท็จง่าย ๆ หรือไม่?
Parse()
มีครั้งว่าวิธีที่ดีที่สุดคือการใช้งาน