在这些语句中(使用 运行MoreLinq
):
var xml = @"
<div>
<p>
<h2>hey</h2>
</p>
<pre />
<h2 class=""cool"" />
<p>
<h2>okay</h2>
</p>
</div>
".Trim();
var div = XElement.Parse(xml);
var h2Elements = div.Descendants("h2");
h2Elements.ToList().ForEach(i =>
{
if(i.Parent.Name != "p") return;
i.Parent.ReplaceWith(i);
});
我看到它i.Parent.ReplaceWith(i)
不会引发异常,但这会引发空引用异常(使用ForEach
from MoreLinq
):
h2Elements.ForEach(i =>
{
if(i.Parent.Name != "p") return;
i.Parent.ReplaceWith(i);
});
我知道 LINQToList()
正在制作列表的副本,但副本不会也抛出异常吗?此外,这里是否发生了某种孤立引用的内存泄漏?