2010-12-14 33 views
1

J'ai la fonction suivante qui prend le chemin d'URL et obtient le lecteur. Comme je ne peux pas fermer le lecteur et le renvoyer. L'appelant peut-il fermer l'objet lecteur renvoyé.peut la fonction de l'appelant fermer la ressource de lecteur xml

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 

Répondre

2

Oui, tout à fait. Lorsque la méthode revient, l'appelant a effectivement pris possession du lecteur (dans ce cas particulier).

Il est vrai que j'utiliser une déclaration using plutôt que:

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

... avec votre code actuel proposé, vous ne fermez le lecteur si une exception est levée.

+0

@ Jon J'ajoute lecteur cache, j'execute sur le code que si la mise en cache est nulle, donc si est utiliser en utilisant le lecteur est la fermeture de l'objet – kobe

+0

@jon ai-je expliquer clairement ?? Je cache essentiellement le sample.xml en utilisant une clé, je ne veux pas charger chaque fois que c'est un fichier statique – kobe

+0

jon j'ai vu votre code correctement, l'appel de méthode lui-même est en utilisant, kool a obtenu merci – kobe

2

Vous ne devez pas utiliser le constructeur XmlTextReader. Vous devez utiliser la méthode facrory dans XmlReader. As described in the docs:

Dans la version .NET Framework 2.0 version , la pratique recommandée est pour créer des instances de XmlReader à l'aide la méthode XmlReader.Create. Ce vous permet de tirer pleinement parti des nouvelles fonctionnalités introduites dans cette version .

À moins que votre méthode n'ait été simplifiée pour ce post, cela rendrait votre méthode obsolète.

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

Si vous avez besoin de cette méthode, vous feriez cette façon:

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

J'utilisais mais je dois exécuter le code ci-dessus seulement si le cache est nul, si le cache est présent je tirerai xmlreader du cache, si je place le code dedans que je ne peux pas tourner l'objet de lecteur en utilisant l'objet – kobe

+0

As Jon a déjà dit, vous devriez vraiment penser à votre approche de la mise en cache des objets jetables. Cela peut vous causer beaucoup de problèmes. Pourquoi faut-il les mettre en cache? – bitbonk

+0

merci pour votre temps – kobe