используя оператор в C# 8 без переменной - PullRequest
6 голосов
/ 11 апреля 2020

Существует ли механизм, чтобы новый оператор c# 8 using работал без локальной переменной?

Учитывая ScopeSomething() возвращает IDisposable (или null) ...

Ранее:

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

Однако в C# 8 с оператором using требуется имя переменной:

using var _ = ScopeSomething();

_ здесь не обрабатывается как сброс.

Я бы ожидал, что это сработало:

using ScopeSomething();

1 Ответ

5 голосов
/ 11 апреля 2020

Существует два вида resource_acquisition, поддерживаемых using согласно спецификациям : local_variable_declaration и expression.

Я считаю, что местное использование в C# 8 является ярлыком для local_variable_declaration формы, а не expression формы согласно предложению языковой функции , где вы можете увидеть:

Ограничения использования объявления:

Должен иметь инициализатор для каждого декларатора.

Это также дает возможность использовать более одного ресурса в одном операторе using согласно состояниям спецификаций языка:

Когда resource_acquisition принимает форму local_variable_declaration, можно получить несколько ресурсов данного типа.

Таким образом, вы можете сделать:

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

Возможно, , что языковая команда может добавить поддержку форм expression в будущих версиях, но на данный момент expression пока не поддерживается.

...