2009-04-08 15 views
6

हमें कोड मैं एक नोड सूचीयात्रा

foreach(XmlNode nodeP in node.SelectNodes("Property")) 
{ 
    propsList.Add(nodeP.Attributes["name"].Value, true); 
} 

इस मामले में के माध्यम से पुनरावृति करने के लिए उपयोग मान लेते हैं अभिव्यक्ति node.SelectNodes ("संपत्ति"), प्रत्येक के लिए में से प्रत्येक यात्रा के दौरान का मूल्यांकन हो जाता है या एक बार?

+0

यह किस भाषा के साथ काम कर रहा है? –

+0

मैंने टैग संपादित किए हैं क्योंकि इसका विशेष रूप से एक्सएमएल के साथ कुछ लेना देना नहीं है - यह सिर्फ फोरच लूप काम करता है इसके साथ ही करना है। अगर कोई असहमत है, तो वापस लौटने के लिए स्वतंत्र महसूस करें। –

उत्तर

11

केवल एक बार। foreach बयान के लिए वाक्यात्मक चीनी (आपके मामले में)

{ 
    IEnumerator<XmlNode> enumerator = node.SelectNodes("Property").GetEnumerator(); 

    XmlNode nodeP; 

    while(enumerator.MoveNext()) 
    { 
     nodeP = enumerator.Current; 

     propsList.Add(nodeP.Attributes["name"].Value, true); 
    } 

    IDisposable disposable = enumerator as IDisposable; 

    if(disposable != null) disposable.Dispose(); 
} 

तो SelectNodes() करने के लिए वास्तविक कॉल केवल एक बार होता है ...।

+0

यह इस विशिष्ट प्रश्न से संबंधित नहीं है, लेकिन यदि गणनाकर्ता डिस्पोजेबल है, तो यह भी निपटान किया जाएगा। –

+0

@Marc: धन्यवाद! संपादित; मैं के बारे में है कि –

+0

हाय भूल गया, उस मामले, जो कोड दो के लिए बेहतर है में, के लिए (आई इंट = 0; मैं

4

ऐसा लगता है कि आप सी #/.NET के बारे में पूछ रहे हैं। SelectNodes() कॉल एक बार किया जाएगा, और फिर गणनाकर्ता को वापसी मान से पुनर्प्राप्त किया जाएगा (जो IENumerable लागू करता है)। वह गणनाकर्ता लूप के दौरान उपयोग किया जाता है, चयन नोड्स() के बाद कोई भी कॉल आवश्यक नहीं है।

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