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?

Foi útil?

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
scroll top