前言
大家都知道,C# 中可以用 using 关键字来简化非托管资源(如文件流、数据库连接等)的释放,当变量离开 using 作用的范围后,会自动调用对象的 Dispose 方法,从而完成非托管资源的释放。在 C#8.0,进一步引入了简化版的 “using声明” 语法来避免多个 using 语句的嵌套,保证代码的优美,例如:
string connStr = "......";
using var conn = new SqlConnection(connStr);
conn.Open();
using var cmd = conn.CreateCommand();
cmd.CommandText = "select * from testdb";
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
// ......
}
虽然 using 语句非常有用,但在实际使用过程中也存在一些潜在的问题,不可不察!
可能的陷阱
嵌套使用 using 语句
当多个 using 语句嵌套在一起,内部 using 语句中的资源在释放时,可能会把外部 using 语句中的资源也释放掉,比如:
using (Stream stream = new FileStream("d:\1.txt", FileMode.OpenOrCreate))
{
using (