2012-11-27 15 views
5

फेंकने MSDN link में के लिए सर्वश्रेष्ठ अभ्यास, यह उल्लेख किया गया है कि
System.Exception या System.SystemException न फेंके।
मेरी कोड में मैं इसपकड़ने और अपवाद

private MsgShortCode GetshortMsgCode(string str) 
     { 
      switch (str.Replace(" ","").ToUpper()) 
      { 
       case "QNXC00": 
        return MsgShortCode.QNXC00; 
       default: 
        throw new Exception("Invalid message code received"); 
      } 
     } 

की तरह फेंक कर रहा हूँ कि यह एक बुरा व्यवहार है ??

उत्तर

9

आम तौर पर आप अधिक स्पष्ट हो सकते हैं।

इस मामले में, आप एक

ArgumentException 

अधिक विशिष्ट आप कर रहे हैं फेंक कर सकते हैं, उतना ही आसान होगा अन्य कोड अपवाद को संभालने के लिए के लिए है।

यह आपको

try 
{ 
    GetshortMsgCode("arg") 
} 
catch(ArgumentException e) 
{ 
    //something specific to handle bad args, while ignoring other exceptions 
} 
3

करने के लिए विशेष रूप से यह आप ArgumentException फेंक दिया जाना चाहिए में अनुमति देता है।

विशिष्ट अपवाद प्रकारों का मुख्य बिंदु कॉलर्स परिप्रेक्ष्य से इसके बारे में सोचना है। मैं समझता हूं कि यह वास्तव में काफी मुश्किल है जब आप कॉलिंग कोड भी लिख रहे हैं क्योंकि आप दोनों पक्षों के कार्यान्वयन विवरण को समझते हैं। हालांकि, हमेशा कोशिश करें और सोचें कि आप कॉलर को पर्याप्त जानकारी के साथ कैसे स्पष्ट रूप से समझ सकते हैं कि क्या कुछ भी गलत है।

इस उदाहरण बस Exception फेंकने में मतलब होगा कि वे क्या वे गलत किया था समझने के लिए, जबकि फेंकने ArgumentException मतलब है कि वे और अधिक आसानी से अपने ट्राई/उन दोनों के बीच पकड़ में अंतर कर सकते हैं त्रुटि संदेश को पार्स करने के लिए होता है कि आप कुछ अवैध पारित कर दिया हो रही है या आप होने किसी अन्य कारण से सही तरीके से निष्पादित करने में विफल रहा।

1

मैं "खराब अभ्यास" जैसे शब्दों का उपयोग करने में अनिच्छुक हूं क्योंकि लगभग सभी संदर्भ कुछ संदर्भों में सही हैं। लेकिन आमतौर पर, हां, यह आपकी स्थिति के लिए मौजूद सबसे विशिष्ट प्रकार के अपवाद को फेंकने के लिए बेहतर माना जाता है, और यदि कोई विशिष्ट अस्तित्व में नहीं है तो आपको एक को परिभाषित करना चाहिए।

कारण यह है कि यदि आप Exception फेंकते हैं, तो आपके कॉलर आपके द्वारा उठाए गए त्रुटि के बीच अंतर नहीं कर सकते हैं और आपके कोड में किए गए कॉल के दौरान सिस्टम द्वारा किसी भी अन्य अपवाद को फेंक दिया जा सकता है।

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

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