0

我有这样的课:

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”类型。

4

2 回答 2

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
于 2013-07-02T07:39:34.977 回答
0

Marcin 解释了为什么它不起作用。我的回答显示了您仍然需要做些什么才能转换XElementMyXElement.

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

Dim x2 = new MyXElement(x1)
于 2013-07-02T07:48:09.977 回答