Pergunta
Vamos assumir o código que eu uso para percorrer uma lista de nós
foreach(XmlNode nodeP in node.SelectNodes("Property"))
{
propsList.Add(nodeP.Attributes["name"].Value, true);
}
Neste caso faz as node.SelectNodes expressão ( "Imóvel"), se avaliados durante cada iteração para cada ou uma vez?
Solução
Apenas uma vez. A declaração foreach é açúcar sintático para (no seu 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();
}
Assim, a chamada real para SelectNodes()
só acontece uma vez.
Outras dicas
Parece que você está perguntando sobre C # / .NET. A chamada SelectNodes () será feita uma vez, e em seguida, o recenseador será recuperado a partir do valor de retorno (que implementa IEnumerable). Isso enumerador é o que é usado durante o loop, há chamadas subsequentes para SelectNodes () são necessárias.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow