说我有:
Class Tiger: XElement
{
public Tiger(XElement t)
:base(t) { }
}
然后我有一个名为Tigers的XDoucment
,我该如何做:
XElement t = Tigers.Descendants("Tiger").ElementAt(0);
(Tiger)t;
t as Tiger;
第一个抛出异常:
Cannot cast 't' (which has an actual type of 'System.Xml.Linq.XElement') to 'Zoo.Tiger'
第二个总是返回null。
我想要实现的是获取XElement中的引用并将其转换为Tiger
。
然后我可以执行XElement.Add
之类的操作,这些操作可以直接影响XDocument中的引用。
答案 0 :(得分:1)
您无法使用继承。 ElementAt返回的对象是一个XElement,而不是Tiger,你无法改变它。如果我给你一个让你喵喵叫的毛茸茸的动物,你就无法将它变成狗,即使Dog是动物的一个子类。
但是,您可以使用构图:
Class Tiger
{
public XElement XElement { get; private set; }
public Tiger(XElement xelement)
{
this.XElement = xelement;
}
}
用法:
XElement x = Tigers.Descendants("Tiger").ElementAt(0);
Tiger t = new Tiger(x);
t.XElement.Add(...);
(注意,因为XElement是引用类型,
t.XElement
x
和Tigers.Descendants("Tiger").ElementAt(0)
将引用内存中相同的 XElement对象。)