类如Stream,StreamReader,StreamWriter等工具IDisposable界面。这意味着,我们可以Dispose()对这些类的对象调用方法。他们还定义了public一种名为的方法Close()。现在,让我感到困惑的是,一旦完成对象我该怎么称呼?如果我都叫我怎么办?我当前的代码是这样的:using (Stream responseStream = response.GetResponseStream()){ using (StreamReader reader = new StreamReader(responseStream)) { using (StreamWriter writer = new StreamWriter(filename)) { int chunkSize = 1024; while (!reader.EndOfStream) { char[] buffer = new char[chunkSize]; int count = reader.Read(buffer, 0, chunkSize); if (count != 0) { writer.Write(buffer, 0, count); } } writer.Close(); } reader.Close(); }}如您所见,我已经编写了using()构造,该构造自动Dispose()在每个对象上调用方法。但是我也调用Close()方法。这样对吗?请向我建议使用流对象时的最佳做法。:-)
3 回答
蝴蝶不菲
TA贡献1810条经验 获得超4个赞
该文档说这两种方法是等效的:
StreamReader.Close:Close的此实现调用传递真实值的Dispose方法。
StreamWriter.Close:Close的此实现调用传递真实值的Dispose方法。
Stream.Close:此方法调用Dispose,将其指定为true以释放所有资源。
因此,这两个都同样有效:
/* Option 1 */
using (StreamWriter writer = new StreamWriter(filename)) {
// do something
}
/* Option 2 */
StreamWriter writer = new StreamWriter(filename)
try {
// do something
}
finally {
writer.Close();
}
就我个人而言,我会坚持使用第一个选项,因为它包含的“噪音”更少。
- 3 回答
- 0 关注
- 1419 浏览
添加回答
举报
0/150
提交
取消