2016-05-08 9 views
0

Ich versuche, eine Erweiterungsmethode zu schaffen für XmlNodes einen ‚fremden‘ XmlNodeC# .NET XmlNode Ownerdocument in Erweiterungsmethode fehlt

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); 
     } 
    } 
} 

hinzufügen Aber Schwierigkeiten habe. Aus unbekannten Gründen bekomme ich den Fehler:

XmlNode enthält keine Definition für OwnerDocument und keine Erweiterung Methode OwnerDocument akzeptiert ein erstes Argument vom Typ XmlNode gefunden werden konnte.

Mit einer ähnlichen Beschwerde über AppendChild auf der nachfolgenden Zeile.

Ich verwende VS2105 und .NET Framework 4.5.2.

Kann mir jemand helfen?

Antwort

1

Sie brauchen nicht <XmlNode> in der Verlängerung Methode Erklärung:

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

der Tat habe ich nicht. Vielen Dank. –

0

Sie haben die Methode als generische Methode erstellt. Eine generische Methode hat Typparameter. Lassen Sie uns umschreiben sie mit Namenskonventionen:

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

Die Fehlermeldung sagt, dass Sie nicht T auf eine Art beschränken hat, die die Eigenschaft Ownerdocument implementiert.

Sie könnten das tun, aber Sie keinen Typ-Parameter überhaupt benötigen, wenn Sie nur auf XmlNode fokussiert sind. Generische Methoden sind in Erweiterungsmethoden nützlich, die allgemein gültig sind.

Also, schreiben Sie es nur als nicht-generische Methode:

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