在 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 specifications,using
支持两种resource_acquisition
:local_variable_declaration
和expression
。
我相信 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
.
是否有一种机制可以让新的 c# 8 using
语句在没有局部变量的情况下工作?
给定ScopeSomething()
returns一个IDisposable
(或null
)...
之前:
using (ScopeSomething())
{
// ...
}
但是在 C# 8 的 using 语句中,它需要一个变量名:
using var _ = ScopeSomething();
此处的_
不视为弃牌
我原以为这会奏效:
using ScopeSomething();
根据the specifications,using
支持两种resource_acquisition
:local_variable_declaration
和expression
。
我相信 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 alocal_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
.