在 C# 8 中使用没有变量的语句

using statement in C# 8 without a variable

是否有一种机制可以让新的 c# 8 using 语句在没有局部变量的情况下工作?

给定ScopeSomething()returns一个IDisposable(或null)...

之前:

using (ScopeSomething())
{
    // ...
}

但是在 C# 8 的 using 语句中,它需要一个变量名:

using var _ = ScopeSomething();

此处的_不视为弃牌

我原以为这会奏效:

using ScopeSomething();

根据the specificationsusing支持两种resource_acquisitionlocal_variable_declarationexpression

我相信 C# 8 中的本地使用是 local_variable_declaration 形式的快捷方式,而不是 the language feature proposal 形式的 expression 形式,您可以在其中看到:

Restrictions around using declaration:

Must have an initializer for each declarator.

这还提供了根据语言规范在单个 using 语句中使用多个资源的能力:

When a resource_acquisition takes the form of a local_variable_declaration, it is possible to acquire multiple resources of a given type.

所以你可以这样做:

using IDisposable a = Foo1();
using IDisposable a = Foo1(), b = Foo2(), c = Foo3();

可能语言团队会在以后的版本中添加expression表单支持,但目前还不支持expression .