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