在using语句中使用各种类型(C#)

And*_*nea 29 c# types using

因为C#using语句只是try/finally {dispose}的语法糖,为什么它只接受多个对象,如果它们属于同一类型?

我不明白,因为他们需要的只是IDisposable.如果所有这些都实现了IDisposable,它应该没问题,但事实并非如此.

具体来说,我习惯写作

using (var cmd = new SqlCommand())
{
    using (cmd.Connection)
    {
        // code
    }
}
Run Code Online (Sandbox Code Playgroud)

我压缩成:

using (var cmd = new SqlCommand())
using (cmd.Connection)
{
    // code
}
Run Code Online (Sandbox Code Playgroud)

我想进一步说明:

using(var cmd = new SqlCommand(), var con = cmd.Connection)
{
    // code
}
Run Code Online (Sandbox Code Playgroud)

但我不能.有人会说,我可能写道:

using((var cmd = new SqlCommand()).Connection)
{
    // code
}
Run Code Online (Sandbox Code Playgroud)

因为我需要处理的只是连接而不是命令,但除此之外.

Jos*_*eph 21

你可以这样做:

using (IDisposable cmd = new SqlCommand(), con = (cmd as SqlCommand).Connection)
{
   var command = (cmd as SqlCommand);
   var connection = (con as SqlConnection);
   //code
}
Run Code Online (Sandbox Code Playgroud)

也许这对你来说是令人满意的.


Eri*_*ert 17

没有特别好的技术原因; 我们可以想出一种允许多种非均匀类型声明的语法.鉴于我们没有,并且已经有一个非常好的,清晰的,可理解的和相当简洁的机制来声明嵌套使用不同类型的块,我们不太可能添加一个新的语法糖只是为了节省一些键击.

  • 哦,我明白......为了保护我们免受语法糖尿病的影响,我们不再添加任何语法糖:P (12认同)
  • 所以换句话说.咩!*耸肩* (2认同)
  • 但是等等,C#中有很多东西"可以省去一些按键".结合使用,它们可以节省大量的击键*.越多越好!MSIL +糖= C#. (2认同)

mqp*_*mqp 5

C#中的其他变量声明只允许您在同一语句中声明多个相同类型的变量; 我不明白为什么using标题应该不同.