MSDN से:क्या कोई अपवाद रूपांतरण से अपवाद फेंकने का कोई बहाना है?
अनावश्यक डाले नष्ट करके, अंतर्निहित रूपांतरण स्रोत कोड पठनीयता में सुधार कर सकते हैं। हालांकि, क्योंकि प्रोग्रामर के निर्दिष्ट होने के बिना अंतर्निहित रूपांतरण हो सकते हैं, अप्रिय आश्चर्यों को रोकने के लिए देखभाल की जानी चाहिए। आम तौर पर, निहित रूपांतरण ऑपरेटरों को कभी अपवाद नहीं फेंकना चाहिए और कभी भी सूचना खोना नहीं चाहिए ताकि प्रोग्रामर की जागरूकता के बिना उनका सुरक्षित रूप से उपयोग किया जा सके। यदि कोई रूपांतरण ऑपरेटर उन मानदंडों को पूरा नहीं कर सकता है, तो इसे स्पष्ट रूप से चिह्नित किया जाना चाहिए।
मैं किसी खास बिंदु से असहमत नहीं है, और मैं मानता हूँ कि यह सब बहुत अच्छा है, वहाँ कभी एक कारण यह है कि अपवाद फेंक नहीं अंतर्निहित रूपांतरण के बारे में हिस्सा तोड़ने वारंट के लिए पर्याप्त महान है?
विशेष मामले से पहले मुझे एक जहां है मेरे पास है:
- मैं एक समारोह है, जो एक कस्टम संग्रह ऑब्जेक्ट है (हम इसे
FooCollection
फोन करता हूँ)। - यह फ़ंक्शन एक आइटम के साथ संग्रह वापस कर सकता है, और इसे स्रोत कोड से निर्धारित किया जा सकता है कि यह होगा या नहीं। (इसके द्वारा मेरा मतलब केवल फ़ंक्शन कॉल है, फ़ंक्शन स्वयं नहीं)
- यदि ऐसा होता है, तो 99.9% की संभावना है कि उपयोगकर्ता एक आइटम के साथ संग्रह के बजाय एक ही आइटम चाहता है।
अब, मैं ऊपर घालना कर रहा हूँ कि क्या FooCollection
=>Foo
से एक अंतर्निहित रूपांतरण इस छोटे से कार्यान्वयन विस्तार को छिपाने के लिए शामिल करने के लिए है, लेकिन संग्रह में एक आइटम है कि अगर यह रूपांतरण केवल काम करेंगे।
क्या इस मामले में Exception
फेंकना ठीक है? या मैं इसके बजाय एक स्पष्ट कलाकार का उपयोग करना चाहिए? इस बारे में कोई अन्य विचार कि मैं इससे कैसे निपट सकता हूं (नहीं, कार्यान्वयन के विवरण के कारण मैं केवल दो कार्यों का उपयोग नहीं कर सकता)?
संपादित करें: मैं यह ध्यान देने योग्य है कि FooCollection
किसी भी इंटरफेस को लागू नहीं करता है या वास्तव में Collection
विस्तार के रूप में नाम, मतलब हो सकता है इसलिए LINQ आधारित जवाब बेकार हैं के योग्य लग रहा है। साथ ही, संग्रह एक संख्यात्मक सूचकांक को कार्यान्वित करता है, यह संग्रह से निपटने का सबसे सहज तरीका नहीं है क्योंकि यह ज्यादातर नामित सूचकांक पर निर्भर करता है।
'Foo x = (Foo) fooCollection' या तो' दाएं 'नहीं होगा (हालांकि यह संकलित होगा)। 'Foo x = (Foo) fooCollection.x()' जिस तरह से इसका उपयोग किया जा रहा होगा। –
x() एक ऐसा फ़ंक्शन है जो fooCollection से 1 आइटम का सबसेट देता है। –
कृपया प्रश्न में मेरा संपादन भी देखें। –