2011-03-21 6 views
6

मैं एक अधूरी परियोजना पदभार संभाल लिया है और मेरे बोलना नास्तिकता करना, हर एक समारोह इस स्वरूप में ही कोशिश पकड़ बयान के साथ लिपटे है: मैं एक विधि के लिए बहुत खोज के रूप में जल्दी से इन सभी को दूर करने केएमएसवीएस सी # कोशिश-पकड़ ब्लॉक को हटाने का सबसे तेज़ तरीका?

try 
{ 
    // work work. 
} 
catch(Exception ex) 
{ 
    MessageBox.Show(ex.Message, ...); 
} 

try- पकड़ो ब्लॉक, मुझे लगता है कि लोग वास्तव में कोशिश कर रहे हैं अपने प्रयासों को स्वचालित रूप से कोशिश करने के लिए विधि को लपेटने के लिए! हमम ... क्या यह अच्छा प्रोग्रामिंग अभ्यास बिल्कुल है? क्या इसके बजाय सभी ब्लॉक को हटाने की विधि है ताकि यह डिबगिंग को आसान बना दे और मुझे अपवादों को वास्तव में हल करने की अनुमति मिल सके?

+0

मुझे इसे एक बार करना था ... मेरा समाधान उन सभी के अंत तक {throw;} जोड़ने के लिए 900 + बार प्रतिलिपि/पेस्ट की 8 घंटे की लकीर थी और पूरी चीज को रीस्टेट करता था। मनोरंजन समय। – asawyer

उत्तर

7

आप यहाँ विकल्प बदल सकते हैं:

Debug -> Exceptions -> CLR Exceptions -> Check the "Thrown" checkbox. 

इस संकलक जब भी कोई अपवाद किसी भी catch ब्लॉक की जाँच से पहले, फेंक दिया जाता है को तोड़ने के लिए कारण बनता है।

+0

+1 - ध्यान दें कि इसका मतलब यह है कि आप प्रोग्राम द्वारा दबाए जाने के बजाय डीबगर में अपवाद प्राप्त करेंगे - यह अपवाद हैंडलिंग को "स्थायी रूप से" अक्षम नहीं करता है। –

+0

यह वास्तव में वास्तव में उपयोगी है। धन्यवाद! हाँ, लेकिन जेसन ने कहा क्योंकि अक्षम भी करना चाहेंगे। – Jake

2

यह एक भयानक प्रोग्रामिंग अभ्यास है। मैंने इसे एक बार किसी के डेटाबेस को बग गड़बड़ के रूप में देखा।

यह मेरी दृढ़ राय है कि आप अपने प्रोग्राम को एक अज्ञात स्थिति में जारी रखने की तुलना में एक अग्निमय मौत मरने से बेहतर हैं।

मैं throw //MessageBox.Show(ex के साथ MessageBox.Show(ex पर एक खोज और प्रतिस्थापन करता हूं और उन्हें सभी को प्रतिस्थापित करता हूं। आपको उन लोगों को मैन्युअल रूप से ढूंढना होगा जो वास्तव में वहां होना चाहिए और उन्हें वापस रखना चाहिए।

2

विजुअल स्टूडियो की रेगेक्स खोज बहुत शक्तिशाली है, हालांकि यह उपयोग करने में थोड़ा मुश्किल है, यहां कुछ ऐसा है जो आपको अपने उपरोक्त कोड की खोज में उपयोगी हो सकता है: (विकल्प संवाद बॉक्स में नोट करें, विकल्प अनुभाग में " उपयोग: रेगुलर एक्सप्रेशन ")

अपने बुरा कैच मिलेगी:।

पकड़ * \ n +: बी + {[.: ख \ n] MessageBox। [: ख \ N।] *}

आप एक करना चाहते हैं तो सीधे थ्रो के साथ बदलें:

पकड़ \ N {\ nthrow; \ n}

0

मैंने वीबी.नेट के लिए इसका समाधान खोज लिया है।

इस बदलें:

\s(?<!End)Try((.|\r\n)+?)Catch(.|\r\n)+?(Finally((.|\r\n)+?)End Try|End Try)

... इस के साथ:

$1$5

यह जबकि पीछे छोड़कर पूरे आज़माएं/कैच ब्लॉक निकाल देंगे केवल क्या कोशिश में था और अंत में ब्लॉक। यह नेस्टेड प्रयास/कैच के साथ काम नहीं करता है, हालांकि, आपको पहले नेस्टेड ब्लॉक को प्रतिस्थापित करना होगा और फिर बाहरी ब्लॉक को अंतिम रूप देना होगा।

+0

उन जगहों पर प्रयास-पकड़ को हटाकर जहां अपवाद वैध रूप से संभाला जाता है, यह एक अच्छा विचार नहीं है। – Aaroninus

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

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