2013-05-16 15 views
6

मैं लूप के लिए संलग्न होने पर एक उपयोग कथन से बाहर निकलने का प्रयास कर रहा हूं। जैसे।किसी उपयोग कथन से बाहर निकलने के लिए कैसे करें

for (int i = _from; i <= _to; i++) 
{ 

    try 
    { 

     using (TransactionScope scope = new TransactionScope()) 
     { 
      if (condition is true) 
      { 
       // I want to quit the using clause and 
       // go to line marked //x below 
       // using break or return drop me to line //y 
       // outside of the for loop. 
      } 

     } 

    } //x 
} 
//y 

मैं ब्रेक जो मुझ पर // y बाहर थूक का उपयोग कर की कोशिश की है, फिर भी मैं कम से के लिए पाश में रहना चाहते हैं // एक्स तो पाश के लिए कार्रवाई करने के लिए जारी है। मुझे पता है कि मैं इसे अपवाद फेंक कर और पकड़ने का उपयोग करके कर सकता हूं लेकिन अगर उपयोग से बाहर निकलने का एक और शानदार तरीका है तो मैं अपेक्षाकृत महंगे ऑपरेशन नहीं करूँगा। धन्यवाद!

+4

क्यों नहीं जारी रखें? – Ofiris

+1

आप शायद एक अलग विधि में उपयोग लूप डाल सकते हैं, और अगर स्थिति सही है तो वापस लौटें। – Rogue

+0

सही सेवा। इसे के माध्यम से नहीं सोचा था। हटाए गए। – Marco

उत्तर

3

रूप @Renan कहा कि तुम ! ऑपरेटर का उपयोग करें और इस शर्त पर अपने bool परिणाम उलट सकते हैं। आप अपने लूप के अगले आइटम पर जाने के लिए continue सी # कीवर्ड्स का भी उपयोग कर सकते हैं।

for (int i = _from; i <= _to; i++) 
{ 
    try 
    { 
        using (TransactionScope scope = new TransactionScope()) 
        { 
            if (condition is true) 
            { 
                // some code 
  
                continue; // go to next i 
            } 
        } 
    } 
} 
+0

मुझे लगता है कि सबसे अच्छा जवाब इस, मेरा, और डेव बिश का मिश्रण है। यदि ओपी थोड़ा और अंतर्दृष्टि प्रदान कर सकता है तो हम एक बेहतर एस्सार भी दे सकते हैं। क्या स्थिति के बावजूद, 'उपयोग' ब्लॉक के अंदर आप अन्य चीजें करेंगे? – Renan

+0

जारी है यह मेरे लिए जीतता है, धन्यवाद @ रेनान और ओरियन –

3

बस if बदलें ताकि स्थिति सही नहीं होने पर आप ब्लॉक दर्ज कर सकें। फिर उस ब्लॉक के अंदर शेष कोड है।

0

मैं तर्क रिवर्स हैं और कहते हैं:

for (int i = _from; i <= _to; i++) 
{ 

    try 
    { 

     using (TransactionScope scope = new TransactionScope()) 
     { 
      if (condition is false) 
      { 
       // in here is the stuff you wanted to run in your using 
      } 
      //having nothing out here means you'll be out of the using immediately if the condition is true 
     } 

    } //x 
} 
//y 

दूसरी ओर यदि आप पूरी तरह से उपयोग करते हुए डेव Bish पता चलता है के रूप में, अपने कोड क्योंकि ऐसे मामलों में जहां आप नहीं चाहते थे कि बेहतर प्रदर्शन करेगा छोड़ का उपयोग कर आप इसके साथ कुछ नहीं करना बस एक वस्तु बनाने नहीं होगा ...

8

पूरी तरह से उपयोग करते हुए जाएं:

if (condition is false) 
{ 
    using (TransactionScope scope = new TransactionScope()) 
    { 
.... 
+0

के साथ उपयोग कथन में लपेट सकते हैं यदि स्थिति डेटाबेस/ईएफ आदि कॉल का हिस्सा है तो क्या होगा? –

+1

फिर बस इसे अंदर रखो? प्रश्न में क्या है, हम केवल सर्वोत्तम समाधान की सिफारिश कर सकते हैं ... –

4

एक using बीएल से बाहर तोड़ कोई जरूरत नहीं है ओक क्योंकि एक प्रयोग ब्लॉक लूप नहीं है। आप बस अंत तक गिर सकते हैं। यदि कोई कोड है जिसे आप निष्पादित नहीं करना चाहते हैं, तो इसे if -clause का उपयोग करके छोड़ दें।

using (TransactionScope scope = new TransactionScope()) 
    { 
     if (condition) 
     { 
      // all your code that is executed only on condition 
     } 
    } 
-1

आप

continue; 

उपयोग करने की कोशिश की है?

+0

यह शायद वर्तमान स्थिति में एक टिप्पणी के रूप में बेहतर है। एक और प्रश्न प्रस्तुत करने के बजाय बस 'जारी रखें' का उपयोग करने का एक उदाहरण प्रदान करें। –

0

मुझे आश्चर्य है कि आप लूप के भीतर लेनदेन स्कॉप्स क्यों बनाना चाहते हैं? क्या ये ज़रूरी हैं? डीटीसी को संभावित वृद्धि हो सकती है? ऐसा क्यों नहीं?

using (TransactionScope scope = new TransactionScope()) 
    { 
     for (int i = _from; i <= _to; i++) 
     { 
      if (condition) 
      { 
       // Do the do 
       continue; 
      } 
     } 
    } 
संबंधित मुद्दे