मुझे पेड़ जैसी संरचना मिल गई है। इस संरचना में प्रत्येक तत्व को उन सभी तत्वों की गणना करने में सक्षम होना चाहिए जो रूट हैं। आइए इस विधि को IEnumerable<Foo> GetAll()
पर कॉल करें। अगर हम C
रिटर्न तत्व पर GetAll
कोपेड़ में नेस्टेड उपज का प्रदर्शन
A <-- topmost root
/ \
B C
/\ /\
D E F G
एक फोन है {C, F, G}
(तत्वों के तय क्रम अच्छा होगा, लेकिन जरूरत नहीं है) तो। मुझे लगता है कि हर कोई पहले से ही जानता था।
GetAll
का वर्तमान क्रियान्वयन इस तरह दिखता है:
public IEnumerable<Foo> GetAll()
{
yield return this;
foreach (Foo foo in MyChildren) {
foreach (Foo f in foo.GetAll()) {
yield return f;
}
}
}
पहले के एक कार्यान्वयन में, मैं एक सूची लौट आए और List.AddRange()
का उपयोग करके जोड़ा बच्चे के कम महत्वपूर्ण चीज़ें।
मेरा सवाल यह है कि यदि उपज का उपयोग करने वाले संस्करण को लागू किया गया है या यदि इसे बेहतर किया जाना चाहिए (प्रदर्शन के संदर्भ में esp।)। या यह सिर्फ बुरा है और मुझे List
एस (या ReadOnlyCollections
) के बजाय चिपकना चाहिए?
उम, तुम क्यों इस मामले में अंत में तोड़ उपज चाहेगा? –
आपको अंत में इसकी आवश्यकता क्यों है? मैंने सोचा कि गणनाकर्ता विधि समाप्त होने पर गणक स्वचालित रूप से समाप्त हो गया है ... – Bevan
हम्म, शायद मैंने उपज के उपयोग के बारे में कुछ गलत समझा। जैसा कि मुझे याद है कि अगर मुझे उपज ब्रेक के साथ विधि बंद नहीं हुई तो मुझे एक त्रुटि मिली; मुझे खेद है अगर मैंने कुछ बेवकूफ कहा! उस मामले को देखने के लिए ... – ShdNx