2010-09-16 16 views
5

मेरे पास ऐसा कुछ है:क्या किसी अन्य विधि से विधि निष्पादन को तोड़ना/वापस करना संभव है?

void MethodToBreak() 
{ 
    // do something 

    if(something) 
    { 
     MethodThatBreaks(); 
     return; 
    } 

    // do something 
} 

void MethodThatBreaks() 
{ 
    // do something 
} 

तो, मैं सोच रहा था: क्या निष्पादन को तोड़ना संभव है: MethodThatBreaks()? फिर, मेरे पास होगा: if(something) MethodThatBreaks(); और यदि if के अंदर की स्थिति सत्य है, तो उस पंक्ति के बाद कुछ भी निष्पादित नहीं किया जाएगा।

नोट: मुझे पता है कि इस मामले में else के साथ यह संभव है, लेकिन मुझे यह नहीं चाहिए।

+0

क्या आपका मतलब है * बजाय * की 'return' आप वर्तमान में है? –

+1

हां, यह वही है जो मेरा मतलब है :) – avance70

+0

वास्तव में नहीं, मेरा मतलब है कि आप एक अपवाद फेंक सकते हैं, या यदि उनके पास रिटर्न प्रकार थे तो एक लाइन पर 'विधि विधि थैटब्रेक्स()' वापस लौटें, लेकिन इनमें से कोई भी उचित समाधान नहीं है, क्या आपके पास आईएमओ का सबसे अच्छा मार्ग है। –

उत्तर

4

यदि आप किसी अन्य विधि से निष्पादन को परेशान करना चाहते हैं तो यह बनाए रखने के लिए एक दुःस्वप्न होगा। यह पता लगाने की कोशिश कर रहा है कि आपका नियंत्रण प्रवाह लाइन के नीचे छह महीने के आसपास क्यों है, या किसी अन्य डेवलपर के लिए, एन्यूरीसिम-प्रेरक होगा।

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

+2

लघु-सर्किटिंग एक सामान्य दृष्टिकोण है, यही वह वर्तमान में कर रहा है ... काम करें, और ASAP से बाहर निकलें। यह हर किसी के कप का प्याला नहीं है, लेकिन यह एक पूरी तरह से मान्य दृष्टिकोण/शैली है :) –

+0

मुझे और नहीं चाहिए क्योंकि मेरे पास ऐसा कोई मामला हो सकता है: 'जबकि (कुछ) अगर (कुछ और) विधिथैटब्रेक्स() ' – avance70

+1

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

0

MethodThatBreaks में अपवाद फेंकना एक संभावना है। तो MethodToBreak के ग्राहक में आप पकड़ने की कोशिश करें।

+3

जो त्रुटियों के लिए ठीक है लेकिन ऐसा लगता है कि इसे MethodThatBreaks के परिणाम के बावजूद वापस लौटने की आवश्यकता है। उस कारण में नियंत्रण प्रवाह के लिए अपवाद का उपयोग गंभीर रूप से सलाह नहीं दी जाती है ... –

+0

@ डेव "उस कारण में नियंत्रण प्रवाह के लिए अपवाद का उपयोग गंभीर रूप से सलाह नहीं दी जाती है"। पूर्ण रूप से! लेकिन सवाल ऐसा कुछ करना था जो एक भी पंक्ति नहीं चलता - यहां तक ​​कि वापसी भी नहीं। कम से कम यह सवाल की मेरी समझ है। – Aliostad

+0

हां, धन्यवाद, लेकिन मैं अपवादों का उपयोग नहीं कर सकता।मैं वर्तमान वास्तुकला को समझाकर प्रश्न को जटिल नहीं करना चाहता था: यह एक डब्ल्यूसीएफ सेवा/ग्राहक आवेदन है। अगर कुछ अवैध किया जाता है, तो मैं सेवा पर अपवादों का उपयोग करता हूं, उदाहरण के लिए, अगर कोई गलत उपयोगकर्ता/पासवर्ड संयोजन के साथ लॉग ऑन करता है तो मैं अपवाद फेंक दूंगा। इस मामले में 'MethodThatBreaks()' का उपयोग ऐसी चेतावनी को संवाद करने के लिए किया जाता है जो वर्तमान सत्र को समाप्त नहीं करना चाहिए, लेकिन विधि निष्पादन को समाप्त कर देगा। – avance70

-2

यह द्वारा किया जा सकता: वैश्विक चर घोषित

a=null; 
void MethodToBreak() 
{ 
    // do something 

    if(something) 
    { 
     MethodThatBreaks(); 
     if(a==null){ 

     } else{ 
     return; 
     } 
    } 

    // do something 
} 

void MethodThatBreaks() 
{ 
    a="somevalue"; 
    // do something 
} 
संबंधित मुद्दे

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