A few weeks ago i was reading about some of the new features coming with C# 6 in different places. I've decided to gather them so you can check them out at once if haven't already. some of them may not as amazing as expected but that the update for now.
You can get them by downloading VS 2014 or installing the Roslyn package for visual studio 2013 from here.
Update:
i add new items to the Article once they are added to Roslyn download package or remove them once they are removed from Roslyn download package.
So lets get started:
1. $ sign
The purpose for it is to simplify string based indexing and that is all. its not some thing like current dynamic features of C# since it internally uses regular indexing functionality. to understand lets consider following example:
var col = new Dictionary<string, string>()
{
$first = "Hassan"
};
col["first"] = "Hassan";
col.$first = "Hassan";
2. Exception filters:
Exception filters are already supported in VB compiler but now they are coming into C#. exception filters lets you specify a condition for a catch block. the catch block gets executed only if the condition is satisfied, this one is my favorite feature, so let's look at an example:
try
{
throw new Exception("Me");
}
catch (Exception ex) if (ex.Message == "You")
{
}
catch (Exception ex) if (ex.Message == "Me")
{
}
3. await in catch and finally block:
As far as I know, no one know why in C# 5 using await keyword in catch and finally block was not available, any way its now possible to use though. this is great because often we want to perform I/O operation in order to log the exception reason in catch block or such things in finally block and they Need asynchrony.
try
{
DoSomething();
}
catch (Exception)
{
await LogService.LogAsync(ex);
}
4. Declaration expressions
This feature simply allows you to declare local variable in the middle of an expression. It is as simple as that but really destroys a pain. I have been doing a lot of asp.net web form projects in the past and this was my every day code:
long id;
if (!long.TryParse(Request.QureyString["Id"], out id))
{ }
which can be improved to this:
if (!long.TryParse(Request.QureyString["Id"], out long id))
{ }
The scoping rules for this kind of declaration is same as general scoping rules in C#.
5. using Static
This feature allows you to specify a particular type in a using statement after that all static members of that type will be accessible is subsequent code.
using System.Console;
namespace ConsoleApplication10
{
class Program
{
static void Main(string[] args)
{
WriteLine("Hellow World");
}
}
}
6. Auto property initializer:
With C# 6 initialize auto properties just like a field at declaration place. The only thing to notice here is that this initialization dose not cause the setter function to be invoked internally. the value of backing field is set directly. so here is an example:
public class Person
{
public string FirstName { get; set; } = "Hassan";
public string LastName { get; } = "Hashemi";
}
7. Primary Constructor:
Woohooo, primary constructors will help destroy the pain of capturing values of constructor parameters to fields in the class for further operations. This is really useful. The main purpose for it is using constructor parameters for initialization. When declaring a primary constructor all other constructors must call the primary constructor using :this().
here is an example finally:
class Person(string firstName, string lastName)
{
public string FirstName { get; set; } = firstName;
public string LastName { get; } = lastName;
}
notice that declaration of primary constructor is at the top of the class.
8- Dictionary Initializer:
some people believed that the old way of initiailzing dictionaries was dirty so the C# team dicided to make it cleaner, thanks to them. here is an example of the old way and new way:
Dictionary<string, string> oldWay = new Dictionary<string, string>()
{
{ "Afghanistan", "Kabul" },
{ "United States", "Washington" },
{ "Some Country", "Some Capital city" }
};
Dictionary<string, string> newWay = new Dictionary<string, string>()
{
["Afghanistan"] = "Kabul",
["Iran"] = "Tehran",
["India"] = "Delhi"
};