使用不带花括号的语句

Tho*_*mas 2 c#

我正在查看 Npgsql 入门示例,但很难理解 using 语句的用法。

var connString = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";

await using var conn = new NpgsqlConnection(connString);
await conn.OpenAsync();

// Insert some data
await using (var cmd = new NpgsqlCommand("INSERT INTO data (some_field) VALUES (@p)", conn))
{
 cmd.Parameters.AddWithValue("p", "Hello world");
 await cmd.ExecuteNonQueryAsync();
}
Run Code Online (Sandbox Code Playgroud)

为什么要在 conn 变量的声明中添加“using”?

await using var conn = new NpgslConnection(connString);
Run Code Online (Sandbox Code Playgroud)

另外,由于没有大括号,为什么在下一行插入数据时 conn 在使用之前没有被释放?

await using (var cmd = new NpgsqlCommand("INSERT INTO data (some_field) VALUES (@p)", conn))
Run Code Online (Sandbox Code Playgroud)

什么时候会处理掉?

小智 6

使用添加来保证交易后您的连接将关闭

await using var conn = new NpgslConnection(connString);
Run Code Online (Sandbox Code Playgroud)

关于你的最后一个问题。

通过新的 C# 8 using 声明,可以简化带有 using 语句的代码。不再需要大括号。在变量 r 的作用域末尾(这里是方法的末尾),调用 Dispose 方法。在这里,编译器还创建一个 *try/finally 块,以确保在发生错误时调用 Dispose。