我看到了这个链接:
https://learn.microsoft.com/en-us/dotnet/api/system.idisposable?view=net-6.0
代码部分是:
if (!File.Exists(filename))
throw new FileNotFoundException("The file does not exist.");
this.filename = filename;
string txt = String.Empty;
StreamReader sr = null;
try
{
sr = new StreamReader(filename);
txt = sr.ReadToEnd();
}
finally
{
if (sr != null) sr.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
StreamReader什么时候变成null?
小智 5
我认为你的问题是关于null该finally部分的检查。
如果在 中的构造函数执行期间引发异常,则该StreamReader sr变量可能位于null该部分中。finallynew StreamReader(filename)
在代码中,首先检查文件是否存在,然后StreamReader创建一个读取该文件的文件。通过询问何时可以StreamReader为 null,您是在询问它的构造函数何时可以抛出异常。它实际上可能在几种情况下发生。
如果出现以下情况,构造函数将抛出异常:
StreamWriter。现在我知道您在想什么:“但它只是检查了文件是否存在”。是的,但考虑一下这种情况:StreamReader构造函数被调用,文件不再存在总之,无论进行多少事先检查都不能 100% 保证您能够在下一纳秒内读取该文件。