उपयोगकर्ता इनपुट को पार्स करते समय, आमतौर पर अपवादों को फेंकने और पकड़ने के लिए नहीं बल्कि सत्यापन विधियों का उपयोग करने की सिफारिश की जाती है। .NET BCL में, यह उदाहरण के बीच का अंतर होगा, int.Parse
(अमान्य डेटा पर एक अपवाद फेंकता है) और int.TryParse
( false
अमान्य डेटा पर रिटर्न )।
मैं अपना खुद का डिजाइन कर रहा हूं
Foo.TryParse(string s, out Foo result)
विधि और मैं वापसी मूल्य के बारे में अनिश्चित हूं। मैं bool
.NET की अपनी TryParse
विधि की तरह उपयोग कर सकता हूं , लेकिन यह त्रुटि के प्रकार के बारे में कोई संकेत नहीं देगा , सटीक कारण के बारे में क्यों s
नहीं पार्स किया जा सकता है Foo
। (उदाहरण के लिए, s
बेमिसाल कोष्ठक, या वर्णों की गलत संख्या, या इसके Bar
बिना Baz
, आदि हो सकते हैं)
एपीआई के उपयोगकर्ता के रूप में , मैं दृढ़ता से उन तरीकों को नापसंद करता हूं जो सिर्फ एक सफलता / असफलता की वापसी करते हैं बूलियन मुझे बताए बिना कि ऑपरेशन विफल क्यों हुआ । यह एक अनुमान लगाने का खेल डिबगिंग बनाता है, और मैं अपने पुस्तकालय के ग्राहकों पर भी थोपना नहीं चाहता।
मैं इस मुद्दे पर बहुत सारे वर्कअराउंड के बारे में सोच सकता हूं (स्टेटस कोड्स लौटाएं, त्रुटि स्ट्रिंग लौटाएं, आउट पैरामीटर के रूप में एक एरर स्ट्रिंग जोड़ें), लेकिन वे सभी उनके संबंधित डाउनसाइड हैं, और मैं भी सम्मेलनों के अनुरूप रहना चाहता हूं .NET फ्रेमवर्क ।
इस प्रकार, मेरा प्रश्न इस प्रकार है:
.NET फ्रेमवर्क में ऐसी विधियाँ हैं जो (क) अपवादों को फेंकने के बिना इनपुट इनपुट और (ख) अभी भी एक साधारण सच्चे / झूठे बूलियन की तुलना में अधिक विस्तृत त्रुटि जानकारी लौटाती हैं?
Parse()
।