gpt4 book ai didi

c# - 扩展 System.Xml.Linq.XElement - 内部 CloneNode

转载 作者:太空宇宙 更新时间:2023-11-03 15:54:24 24 4
gpt4 key购买 nike

我有类 Foo 扩展 System.Xml.Linq.XElement,但是当我调用时

Foo parent = ..;
福子 = ..;
parent.Add(child);

添加的 child 不是Foo类型,而是XElement类型。

这是因为在 Add 方法中调用了 internal abstract XNode CloneNode()

由于内部原因,我无法覆盖它。在这种情况下我有什么选择?我不想覆盖每个调用 CloneNode() 的函数。

最佳答案

现在我有一个丑陋的解决方案,更像是临时 hack 而不是解决方案,通常不起作用,只是修补当前代码。除了在不扩展 XElement 的情况下重写代码之外,我不确定是否有任何好的解决方案,所以我将发布这个。

CloneNode只有在parent字段不为null时才会在Add中调用,但是Parent属性只有get,而且parent字段是内部的。解决我的问题的最简单方法是在 XElementExtended 中隐藏 XElement 添加:

static FieldInfo parentProperty = typeof(XElementExtended).GetField("parent",
BindingFlags.NonPublic | BindingFlags.Instance);
public void Add(XElementExtended element)
{
var el = new XElementExtended(element);
parentProperty.SetValue(el, null);
base.Add(el);
}

关于c# - 扩展 System.Xml.Linq.XElement - 内部 CloneNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24242412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com