以下の最初のようなコードがあります
String xml1 =
@"<resultset>
<result>
<alamakota />
</result>
</resultset>";
String xml2 =
@"<resultset/>";
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xml1);
XmlNodeList nodes1 = xDoc.SelectNodes("/resultset/result");
xDoc.LoadXml(xml2);
XmlNodeList nodes2 = xDoc.SelectNodes("/resultset/result");
Console.WriteLine(nodes1.Count);
Console.WriteLine(nodes2.Count);
私は、WriteLine メソッドが 1 と 0 を返すことを期待していますが、常にではありません。通常のプログラム実行では double 0 が返されます。また、デバッグ中に 2 番目の SelectNodes にブレークポイントを設定し、VS で nodes1.Count の値をチェックすると、最後に 1 と 0 が返されます。SelectNodes は XmlNodeList の最初のチェック中に評価され、コード内にある行では評価されないようです。たとえば、以下のコードは、実行するたびに 1 と 0 を返します。
String xml1 =
@"<resultset>
<result>
<alamakota />
</result>
</resultset>";
String xml2 =
@"<resultset/>";
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xml1);
XmlNodeList nodes1 = xDoc.SelectNodes("/resultset/result");
Int32 c1 = nodes1.Count;
xDoc.LoadXml(xml2);
XmlNodeList nodes2 = xDoc.SelectNodes("/resultset/result");
Console.WriteLine(nodes1.Count);
Console.WriteLine(nodes2.Count);
最初の SelectNodes の後に xDoc = new XmlDocument() を実行できることはわかっていますが、期待どおりに機能しますが、msdn でこのシナリオが見つからないため、これがどのように機能するのか疑問に思います。はいの場合、なぜですか?いくつかのドキュメントを教えてください。