2011-05-05 13 views
8

के दौरान अपवाद को फेंक नहीं सकता है। मैं .NET की आलसी कक्षा के माध्यम से एक महंगी वस्तु शुरू करने की कोशिश कर रहा हूं, जो अपवाद के कारण विफल हो सकता है। आलसी वर्ग का उदाहरण कैश किया गया है क्योंकि यह संभव है कि बाद के प्रयास पर प्रारंभिकता सफल हो सके। PublicationOnly अपवाद के साथ नेट के दस्तावेज़ के अनुसारआलसी प्रारंभिक (सी # .NET)

Lazy<someObject> lazyValue = 
    new Lazy<someObject>(() => { expensive initialization; }, 
     System.Threading.LazyThreadSafetyMode.PublicationOnly); 

कैश नहीं किया जाएगा और इस प्रकार एक मूल्य reinitialize करने के लिए प्रयास कर सकते हैं: मैं इस प्रकार के रूप में इस उदाहरण बनाकर कर रहा हूँ। मैं इस मुद्दे पर भाग गया कि अपवाद पकड़ा नहीं जा सकता है। अब यह अपनी आलसी कक्षा लिखना काफी सरल है, लेकिन मैं यह जानना चाहता हूं कि क्या मैं .NET की आलसी कक्षा का गलत इस्तेमाल कर रहा हूं या क्या उनकी एक बग है?

निम्नलिखित (सरलीकृत) कोड समस्या को पुन: होगा:

private static void DoesntWork() 
{ 
    int i = 0; 

    Lazy<string> lazyValue = new Lazy<string>(() => 
    { 
     if (i < 2) 
     { 
      throw new Exception("catch me " + i); 
     } 

     return "Initialized"; 
    }, System.Threading.LazyThreadSafetyMode.PublicationOnly); 

    for (; i < 3; i++) 
    { 
     try 
     { 
      Console.WriteLine(lazyValue.Value); 
     } 
     catch (Exception exc) // I do not catch the exception! 
     { 
      Console.WriteLine(exc.Message); 
     } 
    } 
} 
+2

यह मेरे लिए काम करता है, मुझे पकड़ो 0 मुझे पकड़ो 1 आरंभ में ' – SLaks

+0

मेरी मशीन पर काम करता है। डिबगिंग के बिना इसे चलाएं (CTRL-F5) – jeroenh

+1

मैंने इसे Ctrl-F5 के साथ चलाने का प्रयास किया और आपका अधिकार यह काम करता है लेकिन क्या कोई अब यह डिबगिंग के दौरान क्यों काम नहीं करता है? – Rehan

उत्तर

5

ठीक है, ऐसा लगता है कि यह काम करना चाहिए। यदि आप कह रहे हैं कि यह अपवाद फेंक रहा है लेकिन इसे पकड़ नहीं रहा है, तो ... किसी भी मौके से, क्या आप विजुअल स्टूडियो में चल रहे हैं, और डीबग> अपवाद मेनू में ArgumentException की जांच हमेशा इसे तोड़ने के लिए कह रही है?

+0

अपवाद का प्रकार कोई फर्क नहीं पड़ता, यह सिस्टम के साथ होता है। अपवाद भी है और हाँ मैं कह रहा हूं कि इसे फेंक दिया गया है और नहीं पकड़ा गया है ... – Rehan

+0

@Rehan Well, उपरोक्त टिप्पणियों में आप कहते हैं कि डिबगिंग कार्यों के बिना चल रहा है। यह सुझाव देता है कि मैं सही हो सकता हूं। क्या आपने डीबग> अपवाद मेनू की जांच की है? – Tesserex

+2

आप सही हैं, विजुअल स्टूडियो हमेशा टूटने के लिए सेट किया गया था लेकिन मुझे उलझन में आया क्योंकि जब यह अपवाद बॉक्स को तोड़ता है तो शीर्षक के साथ पॉप अप होता है: "अपवाद को उपयोगकर्ता कोड द्वारा अनचाहे किया गया था", जो यह स्पष्ट रूप से था। – Rehan

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