我想知道是否有必要Close()在下列情况下打电话(如果没有必要,为什么?)
using (var file = System.IO.File.OpenText(myFilePath))
{
...
}
Run Code Online (Sandbox Code Playgroud)
我认为在以下情况下是必要的
StreamWriter file2 = new System.IO.StreamWriter(myFilePath);
newFileContents.ForEach(file2.WriteLine);
file2.Close();
Run Code Online (Sandbox Code Playgroud)
这是对的吗?
编辑:
我认为我的问题很接近() - 具体,可能是阅读和写作之间的区别....
使用该using构造,您将IDisposable.Dispose在代码块的末尾自动调用,该代码块将关闭该文件.如果您不使用该using声明,则必须自行调用Close.
随着using你也自动获得内置的try /最后的异常处理,这将表现得更加优雅,如果您退出之前出现错误using块.这是使用的另一个原因using是一个好主意,而不是自己滚动.
在您的情况下,using构造是速记:
StreamWriter file2 = new System.IO.StreamWriter(myFilePath);
try
{
newFileContents.ForEach(file2.WriteLine);
}
finally
{
if (file2!= null)
((IDisposable)file2).Dispose();
}
Run Code Online (Sandbox Code Playgroud)
如果您反编译StreamWriter的Dispose实现,您将看到此调用(以及其他):
this.stream.Close();
Run Code Online (Sandbox Code Playgroud)
在最后一块(如果你需要绝对证明;-)
| 归档时间: |
|
| 查看次数: |
5745 次 |
| 最近记录: |