Null-conditional operator and string interpolation in C# 6

ChiefTwoPencils picture ChiefTwoPencils · Dec 15, 2014 · Viewed 19k times · Source

Do the null-conditional operator and interpolated strings syntax resolve to just syntactic sugar?

The null-conditional operator (?.), which allows code clean-up through reducing "excessive" null checking, and interpolated strings (("\{X}, \{Y}")), which brings the arguments and format into one, are new features in C# 6.

Do these get compiled to their undesirable counterparts (i.e. the ugly code we sought to avoid)?

I apologize for the naïve question, I don't have the best understanding of languages in general, but I'm curious if it would be possible to run these features on, say, C# 5.

I know this is the case with Java in some instances, is it true as well with these examples?

Answer

i3arnon picture i3arnon · Dec 15, 2014

There isn't a general rule, it differs. Some features are simply syntactic sugar, some add capabilities that weren't possible before, and some are a combination of both.

Syntactic Sugar

  • String interpolation - This:

    string result = $"{bar}";
    

    Instead of:

    string result = string.Format("{0}", bar);
    
  • Null-propagating operator (?.) - This:

    var result = Foo()?.Length
    

    Instead of:

    var temp = Foo();
    var result = (temp != null) ? temp.Length : null;
    

New Capabilities

  • String interpolation - Also adds support for IFormattable using FormattedString so this is possible:

    IFormattable result =  $"{bar}"
    
  • Await in catch/finally - It's now possible to use await in catch and finally blocks:

    try
    {
    }
    catch
    {
        await Task.Delay(1000);
    }
    

There are of course more features in both categories, like exception filters and expression-bodied members.