2009-04-08 13 views
6

, her biri için her yineleme sırasında ifade node.SelectNodes ("Mülkiyet") değerlendirilir olsun demek bize bu durumda bir düğüm listesiyineleme

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

yineleme yapmak kullanmak kodunu varsayalım ya da bir kere?

+0

Bu hesabın ile çalıştıklarını hangi dil? –

+0

bu özel XML ile ilgisi yoktur çünkü etiketleri kaydetmiştiniz - bu ne kadar foreach döngüsü eserleri ile ilgisi var. Eğer kimse aynı fikirde değilse, geri dönmek için çekinmeyin. –

cevap

11

Sadece bir kez. foreach ifadesi

{ 
    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(); 
} 

Yani SelectNodes() fiili çağrı yalnızca bir zaman olur ... (senin durumunda) için sözdizimsel şekerdir. C#/.NET hakkında soruyorsun gibi

+0

Bu özel soruyla ilgili değildir, ancak numaralayıcı tek kullanımlık ise, atılacak. –

+0

@Marc: Teşekkürler! Düzenlenen; Ben, bu –

+0

Hi ilişkin kod iki daha iyi olduğu durumda, için unutulmuş (0 = int i; i

4

görünüyor. SelectNodes() çağrısı bir kez yapılacaktır ve Numaralayıcı (IEnumerable uygulayan) dönüş değeri ortaya getirilecek bölüm olacaktır. Yani listeleyicisi, SelectNodes hiçbir sonraki çağrılar() gerekli ne döngü sırasında kullanılır olduğunu.