繁体   English   中英

如何将对象转换为继承的类?

[英]How do I cast object to inherited class?

说我有:

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中的引用。

您不能为此使用继承。 ElementAt返回的对象是XElement,而不是Tiger,因此您无能为力。 如果我给您毛茸茸的动物发出叫声,即使Dog是Animal的子类,也无法将其制成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对象。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM