C#.NET XmlNode 在扩展方法中缺少 OwnerDocument

C#.NET XmlNode missing OwnerDocument in Extension Method

我正在尝试为 XmlNodes 创建扩展方法以添加 'foreign' XmlNode

namespace TWSTools.Xml.HelperExtensions
{
    using System.Xml;

    public static class XmlHelperExtensions
    {
        public static void AppendImportedChild<XmlNode>(this XmlNode value, XmlNode incomingNode)
        {
            XmlNode importNode = value.OwnerDocument.ImportNode(value, true);
            value.AppendChild(importNode);
        }
    }
}  

但是我遇到了困难。由于未知原因,我收到错误消息:

XmlNode 不包含 OwnerDocument 的定义,也找不到接受 XmlNode 类型的第一个参数的扩展方法 OwnerDocument。

在后续行中对 AppendChild 有类似的抱怨。

我正在使用 VS2105 和 .NET Framework 4.5.2。

谁能帮帮我?

扩展方法声明中不需要 <XmlNode> :

public static void AppendImportedChild(this XmlNode value, XmlNode incomingNode)
{
    XmlNode importNode = value.OwnerDocument.ImportNode(value, true);
    value.AppendChild(importNode);
}

您已将方法创建为泛型方法。泛型方法具有类型参数。让我们使用命名约定重写它:

public static void AppendImportedChild<T>(this T value, T incomingNode)
{
    T importNode = value.OwnerDocument.ImportNode(value, true);
    value.AppendChild(importNode);
}

错误消息是说您没有将 T 限制为实现 OwnerDocument 属性 的类型。

您可以这样做,但如果您只关注 XmlNode,则根本不需要类型参数。通用方法在通用的扩展方法中很有用。

所以,写成非泛型方法就可以了:

public static void AppendImportedChild(this XmlNode value, XmlNode incomingNode)
{
    XmlNode importNode = value.OwnerDocument.ImportNode(value, true);
    value.AppendChild(importNode);
}