फेंकने रैप करने के लिए मैं एक API जब तक यह एक IndexOutOfBoundsException
फेंकता मुझे वस्तुओं के लिए पूछने की अनुमति देता है कि के साथ एक वर्ग है।नेट इटरेटर एपीआई
क्लीनर कोड लिखने में सक्षम होने के लिए, मैं इसे एक पुनरावर्तक में लपेटना चाहता हूं। जब अभिव्यक्ति के साथ प्रयोग किया, एक उपज वापसी कथन एक कैच ब्लॉक में या एक कोशिश में प्रकट नहीं कर सकते हैं
static IEnumerable<object> Iterator(ExAPI api) {
try {
for(int i = 0; true; ++i) {
yield return api[i]; // will throw eventually
}
}
catch(IndexOutOfBoundsException) {
// expected: end of iteration.
}
}
लेकिन ...
: हालांकि, मैं पुनरावृत्ति को रोकने के लिए अपवाद को पकड़ने के लिए की जरूरत है ब्लॉक जिसमें एक या अधिक पकड़ खंड हैं। अधिक जानकारी के लिए, अपवाद हैंडलिंग विवरण (सी # संदर्भ) देखें। टिप्पणियां (सी # संदर्भ)। (से msdn)
कैसे मैं अभी भी इस एपीआई लपेट कर सकते हैं?
static IEnumerable<object> Iterator(ExAPI api) {
bool exceptionThrown = false;
object obj = null;
for(int i = 0; true; ++i) {
try {
obj = api[i];
}
catch(IndexOutOfBoundsException) {
exceptionThrown = true;
yield break;
}
if (!exceptionThrown) {
yield return obj;
}
}
}
@ कोडिंग गोरिल्ला: यह बात है: नहीं। यह शून्य से शुरू होता है और ऊपर जाता है। – xtofl