C# 6.0 New Features

By | February 24, 2015

C# 6 is available with Visual Studio 2015 and it comes with some new features. To try C# 6, download and install the Visual Studio 2015 preview.

Here are some of the new features that are available in C# 6

1) Auto Property Initializers

You can now assign the value to a property directly at the declaration place. With read only properties (getter only), you can assign the value at the declaration or in the constructor

Before

public class Employee
{
public Guid EmpId {get;set;}

public Employee()
{
EmpId = Guid.NewGuid();
}
}

C# 6

public class Employee
{
public Guid EmpId {get;set;} = Guid.NewGuid();

//Works with read only property also
public string FullName{get;} = "Madhur Kapoor";
}

Using this type of initialisation, the setter function is not invoked internally, the backing field is directly assigned the value

2) Expression-bodied members

If you have got a property/method in your code that contains a single line of code, you can use the “=>” operator to express it instead of defining the body using curly braces

Before

public void PrineName()
{
Console.Writeline(emp.FullName);
}

public string FullName { get {return emp.FirstName + em.LastName; } }

C# 6

public void PrineName() => Console.Writeline(emp.FullName);

public string FullName => emp.FirstName + emp.LastName;

This can only be used with single line functions. Though it does not offer anything useful, it does make the code look a bit readable.

3) Using “Static” Class import

You can specify a particular type in the using statement and all the static members in that type will be available in code

using System.Console;

  class Program
    {
        static void Main(string[] args)
        {
            //Using WriteLine directly instead of 
            // Console.WriteLine
            WriteLine("Hellow World");
        }
    }

4) Exception Filters

Exception Filters can be used to specify a condition for the catch block. The catch block will only be executed if the condition is true.

try
{
    throw new MyException { Severity = 3 };
}
catch (MyException ex) if (ex.Severity == 2)
{
    Console.WriteLine("Will not execute");
}
catch (MyException ex) if (ex.Severity == 3)
{
    Console.WriteLine("Will be executed");
}

5) String Interpolation

Before

string fullname = "Madhur Kapoor"
Console.Writeline("Name - " + fullname);

C# 6

string fullname = "Madhur Kapoor"
Console.Writeline("Name - \{fullname}" );

6) Dictionary Initializer

The syntax for initialising dictionaries is now more readable and clear. It makes the code more easier to read

Before

Dictionary<string, string> eplTeams = new Dictionary<string, string>()
{
    { "Arsenal", "ARS" },
    { "Burnley", "BUR" },
    { "Manchester United", "MUN" }
};

C# 6

Dictionary<string, string> eplTeams = new Dictionary<string, string>()
{
    ["Arsenal] =  "ARS",
    ["Burnley"] =  "BUR",
    ["Manchester United"] = "MUN"
};

7) Await in Catch block

In the earlier versions of C#, using ‘await’ in catch and finally blocks was not available. This can be quite helpful if you want to log some exception to file/database and you don’t want to block the main thread

           try
            {
                DoWork()
            }
            catch (Exception ex)
            {
                await Log.WriteDatabase(ex);
            }

8) Null Conditional Operator

As programmers, we do a lot of null condition check in our code. With the new null condition operator, you can do a lot of null check in a single line of code using the “?” & “??” operator

Before

if(employee != null && employee.ContactDetails != null)
{
Console.WriteLine(employee.Name + "-" + employee.ContactDetails.Address);
}

C# 6

Console.WriteLine(employee?.Name + "-" + employee?.ContactDetails?.Address??" No Details");

In “employee?.Name”, if the object is not null then Name will be printed. The “??” operator can be used to print some other info if the object is null. This features saves a lots of line of code which were earlier used for null checks.

As it is still in preview mode, some features might change when the final version comes out.

Category: C#