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.