我可以在RHV(右手值)中使用using语句吗?

Reu*_*ass 6 c#

我想using纯粹用于范围管理.我可以省略对实现的底层对象的显式引用IDisposable吗?

例如,给出这个声明:

class ITransactionScope : IDisposable {}
class TransactionGuard : ITransactionScope {...}

class DbContext
{
    public IDisposable ITransactionScope()
    {
        return new TransactionGuard();
    } 
}
Run Code Online (Sandbox Code Playgroud)

我可以做以下事情:

void main()
{
    var dbContext = new DbContext();

    using (dbContext.TransactionScope())
    {
        // the guard is not accessed here
    }
}
Run Code Online (Sandbox Code Playgroud)

声明中的TransactionGuard实例是否存活using

Eri*_*ert 10

我想using纯粹用于范围管理.

您应该将该using语句用于其设计目的:及时处理非托管资源.如果这不是你正在使用using的,你可能做错了什么.

我可以省略对实现的底层对象的显式引用IDisposable吗?

正如另一个答案所指出的那样:你已经输入了代码; 你可以简单地尝试一下.

是的,你可以这样做.编译器将为您创建一个不可见的局部变量并对其进行调用Dispose.

如果您对此用法有进一步的疑问,我建议using您阅读C#4规范的第8.13节.