2010-02-08 11 views
5

क्या कोई उपज बनाने वाला कोई तरीका है इटेटरेटर अगले आइटम पर जारी रहता है जब एक इटरेटर ब्लॉक में एक अपवाद होता है?कोई उपज बनाने के लिए कोई तरीका है Iterator अपवाद पर अगले आइटम पर जारी रखें?

यह वर्तमान में काम नहीं कर रहा:

 Boolean result; 
     while (true) 
     { 
      try 
      { 
       result = enumerator.MoveNext(); //Taken from a yield created enumerable 
       if (!result) break; 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("CATCHED..."); 
       continue; 
      } 
     } 

उत्तर

3

कोई वहाँ नहीं है। सी # इटेटरेटर के लिए जेनरेट कोड फेंकने वाले अपवादों का समर्थन नहीं करता है। यदि कोई अपवाद फेंक दिया गया है तो MoveNext ऑपरेशन पूरा नहीं होगा और अगली कॉल जेनरेट किए गए इटरेटर कोड के दृष्टिकोण से उसी स्थान से फिर से खेल जाएगी।

+0

इसे यहां देखें नहीं काफी, एक अपवाद प्रगणक द्वारा फेंका "पूरा गणन" में यह डाल देंगे राज्य। –

+0

तो इसे एक कदम आगे बढ़ाने का कोई तरीका नहीं है? होना चाहिये। – aattia

+0

@aattia, MoveNext विधि एक चरण को आगे बढ़ाने का तरीका है। दूसरा कोड अपवाद फेंककर ऐसा होने से रोकता है। एक अपवाद जो अपवाद फेंकता है मूल रूप से टूटा हुआ है क्योंकि यह 99% IENumerable उपयोगों द्वारा उपयोग योग्य नहीं है। एक विधि जोड़ने में बहुत कम मूल्य है जो कहता है "अगर इटेटरेटर पहले ही टूटा हुआ है, तो कृपया वैसे भी कदम उठाएं"। – JaredPar

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