我有一个返回 XElement
的API,并且我希望这些XElement
后面的文档是不可变的(只读)。我需要它用于:
XDocument
的副本可能是性能上的“沉重”操作。 似乎不可能继承并覆盖
XDocument
/XElement
/XContainer
中的必要行为,因为那里的所有虚拟方法都标记为internal
:internal virtual void XContainer.AddAttribute(XAttribute a)
{
}
所以我的问题是-有没有办法实现它,还是最好有一个不同的API,要么返回类似
XPathNavigator
的东西,要么拥有自己的类,比如IReadOnlyXElement
等,这更好?
最佳答案
您可以创建一个类似于XElement
的ReadOnlyCollection<T>
包装器。
public sealed class ReadOnlyXElement
{
private readonly XElement _element;
public string Value
{
get { return _element.Value; }
}
public ReadOnlyXElement(XElement element)
{
_element = element;
}
public IEnumerable<ReadOnlyXElement> Elements()
{
foreach (var child in _element.Elements())
{
yield return new ReadOnlyXElement(child);
}
}
public IEnumerable<ReadOnlyXElement> Elements(XName xname)
{
foreach (var child in _element.Elements(xname))
{
yield return new ReadOnlyXElement(child);
}
}
}
关于.net - 有没有办法创建一个不变的(只读)XDocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3585120/