Как я могу отказаться от аргумента и локальной переменной в одной области? ⇐ C#
-
Anonymous
Как я могу отказаться от аргумента и локальной переменной в одной области?
Мой текущий код выглядит так:
// для данных методов, например: // void Foo(Action action) // асинхронная задача DoAsync() Foo(unusedInt => { вар unusedTask = DoAsync(); }); Я знаю, что могу использовать переменную сброса (_), начиная с C#7.0, вот так:
Foo(_ => { вар unusedTask = DoAsync(); }); Или
Foo(unusedInt => { _ = DoAsync(); }); Но я встречаю ошибку, если использую _ для них обоих:
Foo(_ => { _ = DoAsync(); // ошибка CS0029 }); ошибка CS0029: невозможно неявно преобразовать тип «System.Threading.Tasks.Task» в «int»
Можно ли как-нибудь отбросить обе неиспользуемые переменные?
Или может ли кто-нибудь подтвердить, что это невозможно в текущей спецификации C#?
Для справки,
Если я опущу unusedTask:
Foo(_ => { ДоАсинк(); // предупреждение CS4014 }); Предупреждение CS4014: поскольку этот вызов не ожидается, выполнение текущего метода продолжается до завершения вызова. Рассмотрите возможность применения оператора await к результату вызова.
Я бы тоже хотел избежать этого предупреждения.
Мой текущий код выглядит так:
// для данных методов, например: // void Foo(Action action) // асинхронная задача DoAsync() Foo(unusedInt => { вар unusedTask = DoAsync(); }); Я знаю, что могу использовать переменную сброса (_), начиная с C#7.0, вот так:
Foo(_ => { вар unusedTask = DoAsync(); }); Или
Foo(unusedInt => { _ = DoAsync(); }); Но я встречаю ошибку, если использую _ для них обоих:
Foo(_ => { _ = DoAsync(); // ошибка CS0029 }); ошибка CS0029: невозможно неявно преобразовать тип «System.Threading.Tasks.Task» в «int»
Можно ли как-нибудь отбросить обе неиспользуемые переменные?
Или может ли кто-нибудь подтвердить, что это невозможно в текущей спецификации C#?
Для справки,
Если я опущу unusedTask:
Foo(_ => { ДоАсинк(); // предупреждение CS4014 }); Предупреждение CS4014: поскольку этот вызов не ожидается, выполнение текущего метода продолжается до завершения вызова. Рассмотрите возможность применения оператора await к результату вызова.
Я бы тоже хотел избежать этого предупреждения.
Мобильная версия