2010-12-14 2 views
1

Ich habe die folgende Funktion, die URL-Pfad und bekommt den Leser. Da ich den Leser nicht schließen und zurückgeben kann. Kann der Aufrufer das zurückgegebene Reader-Objekt schließen?kann der Aufrufer schließen Sie die XML-Reader-Ressource

public XmlReader GetXMLContent(string Path) 
     { 
     XmlTextReader responseReader= new XmlTextReader(XmlUrlPath);                        
     return responseReader; 
     } 

XmlTextReader myReader = GetXMLContent("http://sample.xml"); 
while() // loop through all the elements 
{ 
} 

myReader.close(); // close the reader 

Antwort

2

Ja, absolut. Wenn die Methode zurückkehrt, hat der Aufrufer tatsächlich den Besitzer des Lesers übernommen (in diesem speziellen Fall).

Zwar würde ich eine using Anweisung stattdessen aber:

using (XmlTextReader reader = GetXmlContent("http://sample.xml")) 
{ 
    ... 
} 

... mit Ihrem aktuellen vorgeschlagenen Code, werden Sie den Leser nicht schließen, wenn eine Ausnahme ausgelöst wird.

+0

@ Jon i Leser Cache bin Hinzufügen ich über Code ausführen nur, wenn Caching null ist, also wenn ist Verwendung mit Reader schließt das Objekt – kobe

+0

@jon habe ich es klar zu erklären ?? Ich Cache im Grunde die sample.xml mit einem Schlüssel, ich möchte nicht jedes Mal laden, da es eine statische Datei ist – kobe

+0

Jon ich sah Ihren Code richtig, ist die Methode Aufruf selbst, kool hat es dank – kobe

2

Sie sollten den XmlTextReader Konstruktor nicht verwenden. Sie sollten die Facrory-Methode in XmlReader verwenden. As described in the docs:

In .NET Framework Version 2.0 Release, ist die empfohlene Praxis XmlReader-Instanzen mit der XmlReader.Create Methode zu erstellen. Dieses ermöglicht Ihnen, die vollen Vorteile der neuen Funktionen zu nutzen, die in diesem Release eingeführt werden.

Sofern Ihre Methode für diesen Beitrag nicht vereinfacht wurde, würde dies auch Ihre Methode obsolet machen.

using (XmlReader r = XmlReader.Create("http://sample.xml")) 
{ 
    // read 
} 

Im Fall, dass Sie diese Methode, würden Sie es auf diese Weise tun:

public XmlReader GetXMLContent(string path) 
{ 
    XmlReader responseReader = XmlReader.Create(path); 
    // do something special 
    return responseReader; 
} 

using(XmlReader r = this.GetXMLContent("http://sample.xml")) 
{ 
    // read 
} 
+0

Ich benutze, aber ich muss obigen Code nur ausführen, wenn Cache ist Null, wenn Cache vorhanden ist, werde ich Xmlreader aus dem Cache ziehen, wenn ich den Code innerhalb, dass ich nicht das Reader-Objekt als rturning das Objekt – kobe

+0

As Jon sagte bereits, du solltest wirklich über deinen Ansatz nachdenken, wegwerfbare Objekte zwischenzuspeichern. Es kann dich in große Schwierigkeiten bringen. Warum müssen sie zwischengespeichert werden? – bitbonk

+0

danke für deine zeit – kobe

Verwandte Themen