ノードリストを反復処理するために使用するコードを想定してみましょう
foreach(XmlNode nodeP in node.SelectNodes("Property"))
{
propsList.Add(nodeP.Attributes["name"].Value, true);
}
この場合、式 node.SelectNodes("Property") は、 for each または once の各反復中に評価されますか?
ノードリストを反復処理するために使用するコードを想定してみましょう
foreach(XmlNode nodeP in node.SelectNodes("Property"))
{
propsList.Add(nodeP.Attributes["name"].Value, true);
}
この場合、式 node.SelectNodes("Property") は、 for each または once の各反復中に評価されますか?
1回だけ。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()
は 1 回だけです。
C# / .NET について質問されているようです。SelectNodes() 呼び出しが 1 回行われ、その後、列挙子が戻り値 (IEnumerable を実装) から取得されます。その列挙子はループ中に使用されるものであり、その後の SelectNodes() の呼び出しは必要ありません。