csharplang/proposals/improved-common-type.md
2017-02-09 09:02:29 -08:00

2.1 KiB

improved common type

  • Proposed
  • Prototype: None
  • Implementation: None
  • Specification: See below

Summary

There are two circumstances in which the current common-type algorithm results are counter-intuitive, and result in the programmer adding what feels like a redundant cast to the code. With this change, an expression such as condition ? 1 : null would result in a value of type int?, and an expression of the form condition ? new Dog() : new Cat() would result in a value of their common base type Animal.

Motivation

This is a common cause of what feels to the programmer like needless boilerplate code.

Detailed design

We modify the specification for finding the best common type of a set of expressions to affect the following two circumstances:

  • If one expression is of a non-nullable value type T and the other is a null literal, the result is of type T?.
  • If the two operands are class types and have a common base type other than object, the most specific such type is the result.

This is expected to affect the following aspects of the language:

Drawbacks

There may be some incompatibilities introduced by this proposal.

Alternatives

None.

Unresolved questions

  • What is the severity of incompatibility introduced by this proposal, and how can it be moderated?
  • Should we handle reference types other than class types?

Design meetings

None.