10

クエリを作成する場合は、次のように言います。

(クエリは System.Xml.Linq の XDocument クラスを使用して作成されます)

var elements = from e in calendarDocument.Root.Elements("elementName") select e;

そして、 elements.Last() を数回呼び出します。各呼び出しは最新の Last() 要素を返しますか?

たとえば、私がする場合

elements.Last().AddAfterSelf(new XElement("elementName", "someValue1"));
elements.Last().AddAfterSelf(new XElement("elementName", "someValue2"));
elements.Last().AddAfterSelf(new XElement("elementName", "someValue3"));
elements.Last().AddAfterSelf(new XElement("elementName", "someValue4"));

実際には毎回最新の要素を取得して最後に新しい要素を追加していますか、それとも elements.Last() は毎回同じ要素ですか?

4

1 に答える 1

11

はい、linqクエリは遅延評価されます。Last()クエリが実行されるのは、呼び出すまではありません。この場合、毎回最新の最後の要素を取得します。

Last()実際、呼び出し(またはクエリを実行する他の演算子)の適切な使用法を数回見たのはこれが初めてだと思います。人々がそれをするとき、それは通常誤って悪いパフォーマンスを引き起こします。

linq-to-xmlライブラリは、クエリのパフォーマンスを向上させるのに十分スマートだと思いますが、試してみないと信頼できません。

于 2012-07-05T20:44:04.530 に答える