J'ai une question aujourd'hui impliquant la classe StreamReader. Initialisation spécifiquement de cette classe à l'aide du paramètre Nom de fichier par exemple:
TextReader tr;
try
{
var serializer = new XmlSerializer(type);
tr = new StreamReader(fileName);
var obj = serializer.Deserialize(tr);
}
finally
{
tr.Close();
}
5 Réponses :
N'utilisez pas d'essayer / enfin ici, utilisez l'utilisation de l'instruction, qui fait la même chose que ce que vous faites avec la syntaxe plus propre. La réponse est "oui", BTW :) P>
Le moyen le plus simple consiste à utiliser un Le compilateur générera un blocage de try-enfin pour vous et mettra le code pour appeler fermer (réellement DISPOSER) Enfin. P> Si vous devez épeler le et vous voulez bien sûr vérifier à l'aide de code> instruction: enfin code> explicitement, votre deuxième exemple fonctionnera, sauf que vous devez forcer tr code> à être initialisé: p> tr! = null code> à l'intérieur de votre enfin, au cas où une exception a été produite avant tr = nouveau streamreader (...) code> a été exécuté. p> p>
Dernit. Battez-moi au post :)
Donc, cela signifie que la méthode de près n'a pas besoin d'être appelée manuellement?
JL: correct. Utiliser CODE> S'assurera que la méthode de Dispection est appelée pour vous, et pour la fermeture de Textreader Fermer et disposera de la même chose (le nom de fermeture est conservé pour des raisons historiques). Vous pouvez appeler fermer manuellement à l'aide du bloc à l'aide du bloc si vous souhaitez fermer le lecteur tôt pour une raison quelconque, mais le compilateur générera le jet d'appel dans les scènes dans le cadre de son expansion du mot clé code>. Donc, non, ferme pas i> doit être appelée manuellement si vous utilisez en utilisant code>.
Vous devez utiliser le mot-clé code> à l'aide de code>.
using (TextReader tr = new StreamReader(fileName))
{
var obj = serializer.Deserialize(tr);
}
Oui, soit:
var serializer = new XmlSerializer(type);
using (TextReader tr = new StreamReader(fileName))
{
var obj = serializer.Deserialize(tr);
}
Un commentaire sur ce code
TextReader tr;
try
{
var serializer = new XmlSerializer(type);
tr = new StreamReader(fileName);
var obj = serializer.Deserialize(tr);
}
finally
{
//tr.Close();
// Correct way
if (tr != null) tr.Close();
}
Déclarant textreader tr; Donc, il est disponible pour le moment n'est pas un problème. Mais en utilisant est une meilleure réponse.