代码之家  ›  专栏  ›  技术社区  ›  Daniel A. White

在C#8中使用不带变量的语句

  •  1
  • Daniel A. White  · 技术社区  · 4 年前

    新的c#8有机制吗 using 语句在没有局部变量的情况下工作?

    鉴于 ScopeSomething() 返回a IDisposable (或 null )...

    以前:

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

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

    using var _ = ScopeSomething();
    

    这个 _ 这里不被视为丢弃。

    我原本以为这会奏效:

    using ScopeSomething();
    
    0 回复  |  直到 4 年前
        1
  •  10
  •   Community nesinervink    4 年前

    有两种 resource_acquisition 支持由 using 根据 the specifications : local_variable_declaration expression .

    我相信C#8中的本地使用是 local_variable_declaration 形式不 表达 形式按 the language feature proposal ,在那里你可以看到:

    关于使用声明的限制:

    每个声明器都必须有一个初始化器。

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

    当a 资源获取 采用a的形式 local_variable_declaration ,可以获取给定类型的多个资源。

    所以你可以这样做:

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

    五月 语言团队可以添加 表达 在未来的版本中支持表单,但就目前而言, 表达 尚不支持。