1

2 つのノードを返す linq to xml クエリがあります。これらのノードを繰り返し処理して、それらのコンテンツを置き換えようとしています。ただし、XDocument に追加されているコンテンツには、クエリ基準に一致するノードが含まれています。

    protected internal virtual void AddLinkDocument(XDocument content, TaskRequest request)
    {
        var links = content.Descendants("some.link").Where(tag => tag.Attribute("document-href") != null);

        foreach (XElement link in links) //first time through there are 2 links found
        {
             //do some stuff

            link.ReplaceNodes(inlineContent); // after content is added, "links" now in foreach now has many new links found
        }
    }

コレクション、「リンク」が foreach を介して毎回動的に更新されるのはなぜですか?

助けてくれてありがとう!

4

1 に答える 1

0

ここにはいくつかの要因があるようです。

  1. を定義した方法ではlinks、 の反復ごとに再クエリが実行されますforeach
  2. 再クエリは、(直接の子だけでなく) クエリに一致する すべての子孫を検索します。

私の推測では、反復ブロックは、クエリに一致する (つまり、"document-href" 属性を含む) いくつかの新しい要素を追加します。

したがって、次のいずれかを試すことをお勧めします。

  • ToArray()の定義の最後にa を追加しlinksます。
  • またはElements代わりにを使用しDescendantsて、 の子ノードのみを照会しますcontent
于 2012-09-04T16:23:45.377 に答える