2009-05-27 13 views
117

UnhandledExceptionEventArgs.ExceptionObject एक ऑब्जेक्ट क्यों है और Exception नहीं है?UnhandledExceptionEventArgs.Exception एक ऑब्जेक्ट ऑब्जेक्ट करें और अपवाद नहीं है?

मैं AppDomain.UnhandledException से जोड़ रहा हूं।

मैं UnhandledExceptionEventArgs.ExceptionObject को Exeption पर डालना और इसे संवाद करना चाहता हूं।

और इसके साथ दिमाग में यह कभी शून्य नहीं होगा?

MSDN documentation बेहद उपयोगी नहीं है।

अनचाहे अपवाद ऑब्जेक्ट प्राप्त करता है।

उत्तर

135

इसे अपवाद पर टाइप नहीं किया जा सकता है क्योंकि ऑब्जेक्ट्स को फेंकना संभव है। नेट जो सिस्टम से प्राप्त नहीं होता है। अपवाद। यह सी # या वीबी.Net में संभव नहीं है लेकिन यह अन्य सीएलआर आधारित भाषाओं में संभव है। इसलिए एपीआई को इस संभावना का समर्थन करना चाहिए और प्रकार ऑब्जेक्ट का उपयोग करना चाहिए।

तो जब यह कभी शून्य नहीं होना चाहिए, यह वास्तव में एक सिस्टम नहीं हो सकता है। अपवाद।

CLI देखें कल्पना खंड 10.5 (विशेष रूप से नियम 40 सीएलएस) अधिक जानकारी के

+3

धन्यवाद जेरेड मैंने आपके उत्तर और एमएसडीएन समुदाय सामग्री पर वापस एक लिंक जोड़ा है – Simon

+0

तो इसे सी # में अपवाद पर कास्टिंग करना कोई समस्या नहीं होगी? सही? –

+1

@ मुबारर अहमद यह समस्या हो सकती है यदि प्रकार 'सिस्टम.एक्सप्शन' से नहीं लिया गया है। अपवाद एक गैर-सीएलआई अनुपालन भाषा से हो सकता है जो 'System.Int32' को फेंकने का निर्णय लेता है। सीएलआर के नए संस्करण इसे 'सिस्टम.एक्सप्शन' में किसी भी तरह से स्वतः लपेटेंगे लेकिन यह एक सेटिंग है जिसे अक्षम किया जा सकता है – JaredPar

73

क्या जारेड पहले ही उल्लेख किया गया है, आप सुरक्षित रूप से .NET फ्रेमवर्क 2.0 में Exception पर कास्ट कर सकते और उच्च यदि RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true) लागू किया गया है के अलावा के लिए आपकी असेंबली (सी # और वीबी कंपाइलर्स द्वारा स्वचालित रूप से जोड़ा जाएगा)।

जब यह विशेषता लागू की गई है, तो गैर-अपवाद "अपवाद" RuntimeWrappedException में लपेटा जाएगा।

+3

जानकारी के लिए धन्यवाद; मैं इसे मैन्युअल रूप से संभालने वाला था, यानी, इसे एक रनटाइम लपेटा गया अपवाद में लपेटा गया अगर यह अपवाद डालने में विफल रहा। – Dennis

संबंधित मुद्दे