2012-12-28 11 views
5

मैं एक कस्टम अपवाद को परिभाषित करना चाहता हूं, और मैं जानना चाहता हूं कि संदेश के रूप में स्ट्रिंग के बजाय मैं कक्षा को शामिल कर सकता हूं या नहीं। कारण यह है कि मैं एक संरचना में अतिरिक्त जानकारी भेजना चाहता हूं जो अधिक लचीला हो सकता है।क्या मैं अपवाद में अतिरिक्त जानकारी ले जाने वाली वस्तु को शामिल कर सकता हूं?

+2

"एक वर्ग के बजाय एक स्ट्रिंग फेंक" ??? कीवर्ड हमेशा फेंक एक अपवाद है जो एक वर्ग है फेंकता इसलिए, आप हमेशा कक्षा को फेंक रहे हैं .. – nitgeek

उत्तर

16

हां। बस एक वर्ग बनाएं जो अपवाद से विरासत में मिलता है।

class YourException : Exception 
{ 
    public YourException(SpecialObject thethingYouWantIncluded) 
    { 
     ExtraObject = thethingYouWantIncluded; 
    } 

    public SpecialObject ExtraObject { get; private set; } 
} 

तो

throw new YourException(new SpecialObject()); 

और

catch (YourException ex) { /* do something with ex.ExtraObject here */ } 
6

हाँ आप कर सकते हैं, एक तरह से।

सी # में, सभी अपवाद कक्षाएं हैं, वे System.Exception या उससे प्राप्त कुछ वर्ग के उदाहरण हैं। यदि आप एक कस्टम अपवाद बनाना चाहते हैं, तो आपको केवल Exception से प्राप्त होने वाली एक नई कक्षा को परिभाषित करने की आवश्यकता है।

इस कस्टम वर्ग, आप जोड़ सकते हैं में जो कुछ भी अतिरिक्त गुण, खेतों, आदि है कि आप चाहते हैं:

public class CustomException : Exception 
{ 
    public Object CustomThing { get; set; } 
} 

जब आप प्रकार का एक चर में इस तरह के एक अपवाद को पकड़ने CustomException आप सभी के लिए उपयोग होगा आपके द्वारा परिभाषित कस्टम गुण, किसी भी अन्य वर्ग की तरह।

हालांकि, आप नहीं कर सकते हैं तथ्य यह है कि Exception.Message एक स्ट्रिंग है। आपकी कस्टम संदेश कक्षा में Message संपत्ति होगी और यह string होगी, और आप इसे बदल नहीं सकते हैं। आपको एक कस्टम स्ट्रिंग को परिभाषित करने की आवश्यकता होगी जिसमें सभी प्रासंगिक जानकारी शामिल हों। आप अपने कस्टम गुणों से जानकारी लौटाने के लिए Message संपत्ति ओवरराइड कर सकते हैं, लेकिन यह अभी भी एक स्ट्रिंग की जरूरत है:

public class CustomException : Exception 
{ 
    public override string Message 
    { 
     get 
     { 
      if (this.CustomThing == null) 
      { 
       return base.Message; 
      } 
      else 
      { 
       return string.Format("Custom thing: {0}", this.CustomThing); 
      } 
     } 
    } 
} 
+0

+1 उल्लेख करने के लिए: "हालांकि, आप क्या नहीं कर सकते हैं यह तथ्य बदल गया है कि अपवाद। संदेश एक स्ट्रिंग है।" – hometoast

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

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