csharplang/proposals/null-conditional-await.md
2017-02-09 09:02:29 -08:00

1.5 KiB

null-conditional await

  • Proposed
  • Prototype: None
  • Implementation: None
  • Specification: Started, below

Summary

Support an expression of the form await? e, which awaits e if it is non-null, otherwise it results in null.

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

We add a new form of the await_expression:

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.

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

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

  • Requires LDM review

Design meetings

None.