2009-04-08 29 views
6

Vamos a suponer el código que utilizo para iterar a través de una lista de nodospara cada repetición del bucle

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

en este caso significa la expresión node.SelectNodes ("Propiedad"), consigue evaluado durante cada iteración para cada o una vez?

+0

¿Con qué idioma está trabajando? –

+0

He editado las etiquetas porque esto no tiene nada que ver específicamente con XML; solo tiene que ver con cómo funciona el bucle foreach. Si alguien no está de acuerdo, siéntete libre de revertir. –

Respuesta

11

Solo una vez. La instrucción foreach es el azúcar sintáctica para (en su caso) ...

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

Así que la llamada real a SelectNodes() sólo pasa una vez.

+0

No está relacionado con esta pregunta específica, pero si el enumerador es desechable, se eliminará también. –

+0

@Marc: ¡Gracias! Editado; Me había olvidado que –

+0

Hola, En ese caso, qué código es mejor de los dos, for (int i = 0; i

4

Parece que estás preguntando por C#/.NET. La llamada a SelectNodes() se realizará una vez, y luego el enumerador se recuperará del valor de retorno (que implementa IEnumerable). Ese enumerador es lo que se usa durante el ciclo, no son necesarias las llamadas posteriores a SelectNodes().

Cuestiones relacionadas