UnhandledExceptionEventArgs.ExceptionObject एक वस्तु और एक अपवाद नहीं है?


126

UnhandledExceptionEventArgs.ExceptionObjectकोई वस्तु क्यों है और एक नहीं है Exception

से अटैच कर रहा हूं AppDomain.UnhandledException

मैं UnhandledExceptionEventArgs.ExceptionObjectएक कास्ट Exceptionऔर इसे इंटरोगेट करना चाहूंगा।

और इसे ध्यान में रखते हुए क्या यह कभी अशक्त होगा?

MSDN प्रलेखीकरण exatly उपयोगी नहीं है।

बिना किसी अपवाद वाली वस्तु प्राप्त करता है।

जवाबों:


148

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

तो जबकि यह कभी अशक्त नहीं होना चाहिए, यह वास्तव में एक System.Exception नहीं हो सकता है।

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


3
धन्यवाद जारेड मैंने आपका जवाब और एक लिंक वापस यहाँ जोड़ दिया है msdn समुदाय की सामग्री के लिए
साइमन

तो इसे C # में Exception के लिए कास्टिंग करना कोई समस्या नहीं होगी? सही?
मुबशहर

1
@ MubasharAhmad यह एक समस्या हो सकती है यदि प्रकार से व्युत्पन्न नहीं है System.Exception। अपवाद एक गैर-सीएलआई अनुरूप भाषा से उत्पन्न हो सकता है जो एक फेंकने का निर्णय लेता है System.Int32। CLR के नए संस्करण System.Exceptionवैसे भी इसे ऑटो-रैप करेंगे लेकिन यह एक ऐसी सेटिंग है जिसे अक्षम किया जा सकता है
JaredPar

1
@MubasharAhmad मैं आपको सलाह दूंगा कि आप 'के रूप में' कास्ट का उपयोग करें, ताकि इस मामले में कि वस्तु टाइप अपवाद से उत्पन्न न हो, कास्ट एक अपवाद को फेंकने के बजाय अशक्त हो जाए।
david.barkhuizen

फिर try-catchगैर-अपवाद वस्तुओं को पकड़ने की अनुमति क्यों नहीं है?
AgentFire

79

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

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


3
जानकारी के लिए धन्यवाद; मैं इसे मैन्युअल रूप से संभाल रहा था, अर्थात, यदि इसे अपवाद के रूप में रखने में विफल रहा तो इसे RuntimeWrappedException में लपेट दिया गया।
डेनिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.