このコードは機能します:
var element = XElement.Parse("<div><span><em>Content</em></span><span><em>Content2</em></span></div>");
var spans = element.Descendants("span").ToList();
foreach(var span in spans)
{
span.ReplaceWith(span.Nodes());
}
これはそうではなく、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生します。
var element = XElement.Parse("<div><span><em>Content</em></span><span><em>Content2</em></span></div>");
var spans = element.Descendants("span");
foreach(var span in spans)
{
span.ReplaceWith(span.Nodes());
}
唯一の違いは、子孫ノードのリストを作成するときに「ToList()」を削除したことです。どうしてこれなの?
IQueryable は IEnumerable を実装しており、繰り返し実行すると遅延実行が強制されると思ったのに、なぜ「ToList()」がここで違いを生んでいるのでしょうか?