csharplang/proposals/null-conditional-await.md

51 lines
1.5 KiB
Markdown
Raw Normal View History

2017-02-09 18:02:29 +01:00
# null-conditional await
* [x] Proposed
* [ ] Prototype: None
* [ ] Implementation: None
* [ ] Specification: Started, below
## Summary
[summary]: #summary
Support an expression of the form `await? e`, which awaits e if it is non-null, otherwise it results in `null`.
## Motivation
[motivation]: #motivation
This is a common coding pattern, and this feature would have nice synergy with the existing null-propagating and null-coalescing operators.
## Detailed design
[design]: #detailed-design
We add a new form of the *await_expression*:
``` antlr
await_expression
: 'await' '?' unary_expression
;
```
The null-conditional `await` operator awaits its operand only if that operand is non-null. Otherwise the result of applying the operator is null.
The type of the result is computed using the [rules for the null-conditional operator](https://github.com/dotnet/csharplang/blob/master/spec/expressions.md#null-conditional-operator).
## Drawbacks
[drawbacks]: #drawbacks
As with any language feature, we must question whether the additional complexity to the language is repaid in the additional clarity offered to the body of C# programs that would benefit from the feature.
## Alternatives
[alternatives]: #alternatives
Although it requires some boilerplate code, uses of this operator can often be replaced by an expression something like `(e == null) ? null : await e` or a statement like `if (e != null) await e`.
## Unresolved questions
[unresolved]: #unresolved-questions
- [ ] Requires LDM review
## Design meetings
None.