【发布时间】:2009-06-08 17:53:00
【问题描述】:
既然 C# using 语句只是 try/finally{dispose} 的语法糖,为什么它只接受多个对象只有当它们属于同一类型时?
我不明白,因为它们只需要 IDisposable。如果他们都实现了 IDisposable 应该没问题,但事实并非如此。
特别是我习惯写作
using (var cmd = new SqlCommand())
{
using (cmd.Connection)
{
// Code
}
}
我压缩成:
using (var cmd = new SqlCommand())
using (cmd.Connection)
{
// Code
}
我想进一步压缩成:
using(var cmd = new SqlCommand(), var con = cmd.Connection)
{
// Code
}
但我不能。我可能,有人会说,写:
using((var cmd = new SqlCommand()).Connection)
{
// Code
}
因为我需要处理的只是连接而不是命令,但这不是重点。
【问题讨论】:
-
我认为这实际上是一个好主意。我认为这只是尚未实施的东西。如果有一个不存在的实际具体原因,我会感到惊讶。不过我可能是错的......
-
我在这里学到新东西了吗?上例中第二个未赋值的 using 语句是什么情况?该项目是否成为范围?
-
@spender: using 的参数需要是可以转换为 IDisposable 的表达式。声明就是(只有一个)这样的表达式。
-
@spender:是的,你(可能)学到了一些新东西。 using 的语法是 using(IDisposableInstance) 语句;。正如 Henk Holterman 所说,赋值是一种运算,其结果(通常未使用但在此使用)是赋值。
-
受您的问题启发,我尝试了以下想法:stackoverflow.com/questions/974484/…