当出现异常时,我想确保在创建阅读器后关闭阅读器。所以我想在这个 try and catch 中包含一个 finally 括号。但是我不能在 finally 括号中关闭它,除非我在 try 括号的外面声明了读者。但是,如果我这样做,我将不会在创建阅读器时捕捉到任何异常。我不确定是否关闭阅读器有多重要。
XmlSerializer xmlSr = new XmlSerializer(typeof(List<ProjectObject>));
try
{
FileStream reader = new FileStream(mTextFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
List<ProjectObject> addProjects = (List<ProjectObject>)xmlSr.Deserialize(reader);
mSharedDriveLocalProjects = addProjects;
reader.Close();
}
catch
{
MessageBox.Show("Failed to load XML file");
}
以上是我的代码。是不是这样更好?
XmlSerializer xmlSr = new XmlSerializer(typeof(List<ProjectObject>));
FileStream reader = new FileStream(mTextFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
try
{
List<ProjectObject> addProjects = (List<ProjectObject>)xmlSr.Deserialize(reader);
mSharedDriveLocalProjects = addProjects;
}
catch
{
MessageBox.Show("Failed to load XML file");
}
finally
{
reader.Close();
}
最佳答案
Using Statement就是为了解决这些困境
XmlSerializer xmlSr = new XmlSerializer(typeof(List<ProjectObject>));
using(FileStream reader = new FileStream(mTextFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
try
{
List<ProjectObject> addProjects = (List<ProjectObject>)xmlSr.Deserialize(reader);
mSharedDriveLocalProjects = addProjects;
}
catch
{
MessageBox.Show("Failed to load XML file");
}
}
在 using 语句中声明和创建的任何一次性对象都在 block 的导出处处理(调用对象的 dispose 方法,该方法通常负责清理所有内容,包括文件的关闭)
请注意,using 语句类似于 try/finally,因此,如果您想捕获异常并向用户显示一条友好的错误消息或将其记录在某处,您仍然需要在您的代码周围显式准备一个 try/catch block 代码。
关于c# - FileStream 在 try and catch 中,关闭读取器有多重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35300006/