无法从基础XElement类强制转换

时间:2013-07-02 07:17:03

标签: .net vb.net inheritance casting xelement

我有这样的课程:

Public Class MyXElement
    Inherits XElement

    Public Sub New(other As XElement)
        MyBase.New(other)
    End Sub

    Public Sub New(name As XName)
        MyBase.New(name)
    End Sub

    Public Sub New(other As XStreamingElement)
        MyBase.New(other)
    End Sub

    Public Sub New(name As XName, content As Object)
        MyBase.New(name, content)
    End Sub

    Public Sub New(name As XName, ParamArray content() As Object)
        MyBase.New(name, content)
    End Sub

End Class

为什么以下代码失败?

Dim x1 As XElement = <demo></demo>
Dim x2 As MyXElement
x2 = x1

我得到异常:无法将“System.Xml.Linq.XElement”类型的对象强制转换为“MyXElement”。

2 个答案:

答案 0 :(得分:2)

很简单 - x1不是MyXElement对象!这与尝试以下内容相同:

Dim o1 as Object = new Object()
Dim o2 as String
o2 = o1

String继承Object这一事实并不意味着您可以将Object变量分配给String

它的另一种方式。您可以轻松地写下以下内容:

Dim x1 As MyXElement = new MyXElement("name")
Dim x2 As XElement
x2 = x1

答案 1 :(得分:0)

Marcin解释了为什么它不起作用。我的回答显示了将XElement转换为MyXElement时需要执行的操作。

您需要使用在MyXElement上定义的构造函数:

Dim x2 = new MyXElement(x1)