我今天有一个关于 StreamReader 类的问题。具体使用文件名参数初始化此类例如:
TextReader tr = new StreamReader(fileName);
显然,当此操作完成后,像这样关闭流很重要:
tr.Close();
我想试试这个/最后,问题是我找不到办法做到这一点。以下是我发现的一些不起作用的变体:
try
{
var serializer = new XmlSerializer(type);
TextReader tr = new StreamReader(fileName);
var obj = serializer.Deserialize(tr);
}
finally
{
tr.Close();
}
更糟的是:
TextReader tr;
try
{
var serializer = new XmlSerializer(type);
tr = new StreamReader(fileName);
var obj = serializer.Deserialize(tr);
}
finally
{
tr.Close();
}
那么是否可以在 finally 中关闭 StreamReader?
最佳答案
最简单的方法是使用 using
语句:
using (TextReader tr = new StreamReader(fileName))
{
// ...
}
编译器会为你生成一个try-finally block ,并在finally中放入调用Close(实际上是Dispose)的代码。
如果您需要明确地拼出 finally
,您的第二个示例将起作用,除了您需要强制初始化 tr
:
TextReader tr = null;
你当然会想要检查 finally block 中的 tr != null
,以防在 tr = new StreamReader(...)
之前发生异常被执行了。
关于C# StreamReader 尝试/最终,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2166278/