[C#] The "?." operator in C# 6?

Visual Studio User Voice is a great site. It lets the community at large propose and vote for features in upcoming Microsoft products.

Some time ago I cast my vote for a feature which I felt has been lacking for a long time in C#: the ?. operator.

?. would serve to eliminate chained null reference checks when accessing fields and properties on objects. The idea is that instead of writing this

return obj != null ? obj.X : null;

you could simply write this

return obj?.X;

Pretty useful eh? Especially when you are dealing with several layers of objects embedded in one another (I’m looking at you, HttpContext!).

Well I was absolutely elated to receive an email in my inbox this morning from Visual Studio User Voice regarding this issue. C# language PM Mads Torgersen posted on the ?. idea page stating the following.

We are seriously considering this feature for C# and VB, and will be prototyping it in coming months. Syntax in C# would be

  • `e?.x // member access`
  • `e?.M(…) // method invocation`
  • `e?[…] // indexing`

Semantically this will be similar to

(e == null) ? null : e.x

etc., except that e will only be evaluated once of course.

If the type of e.x (etc) is a non-nullable value type S, then the type of e?.x is S?. Otherwise the type of e?.x is the same as that of e.×. If we can’t tell whether the type is a non-nullable value type (because it is a type parameter without sufficient constraints) we’ll probably give a compile-time error.

Let’s hope it makes the final cut!