Here are some features that are available in C# 6.0 -:
1) Auto Property Initialization.
2) Use of Conditional operator to check NULL values.
3) nameof Expressions
4) String Interpolation
5) Exception filters
6) Bodied Methods
7) Using static
Explanation
1) Auto Property Initialization
Previously to initialize a property we have to create constructor inside which we have to set default value for that property. Following is the example -:
Older way
Class Test
{
public int UserID { get; set; }
public Test()
{
UserID = -1;
}
}
Newer way
Class Test
{
public int UserID { get; set; } = -1;
}
2) Use of Conditional operator to check NULL values
We often need to apply NULL checks to avoid NULL reference exception.
Older way
int userId = user != null ? user.Id : -1;
Newer way
int userId = user?.Id ?? -1;
3) nameof Expressions
It will return string literal of name of properties/methods.
Suppose we are logging name of method in catch block if any exception occur to improve logging. It help us to identify method in which exception occurs. Previously we write hard-coded name like "Exception in GetUser()". But if we required to rename method say GetUserNew() we might forget to rename method in above hard-coded string. Now if exception comes exception log will contain "Exception in GetUser()" and we might search for GetUser() in our application but it will not found as we have renamed it. So by using nameof at time we rename function it will give error at compile-time to change the method name.
Older way
public static int MyFunction(int a, int b)
{
try
{
return a / b;
}
catch (Exception ex)
{
Console.WriteLine("Error in function MyFunction"); // We might forget to rename here.
Console.ReadKey();
return 0;
}
}
Newer way
public static int MyFunction(int a, int b)
{
try
{
return a / b;
}
catch (Exception ex)
{
Console.WriteLine("Error in function "+ nameof(Test.MyFunction)); // While renaming, Will give compile time error here and we can rename.
Console.ReadKey();
return 0;
}
}
4) String Interpolation
Previously we use string.Format() method to write interpolated strings. In C# 6.0 we don't need Format() method for interpolation of strings.
Older way
string fName = "Michael";
string lName = "Scofield";
Console.WriteLine(string.Format("First Name -: {0} Last Name -: {1}", fName, lName));
Newer way
string fName = "Michael";
string lName = "Scofield";
Console.WriteLine($"First Name -: {fName} Last Name -: {lName}");
5) Exception filters
This feature gives power to apply conditions for catch blocks. Suppose I have to log ex.InnerException if its not null otherwise log ex.Message.
Older way
public static int MyFunction(int a, int b)
{
try
{
return a / b;
}
Catch(Exception ex)
{
if(ex.InnerException !=null)
{
Console.WriteLine(ex.InnerException);
}
else
{
Console.WriteLine(ex.Message);
}
}
}
Newer way
public static int MyFunction(int a, int b)
{
try
{
return a / b;
}
Catch(Exception ex) when(ex.InnerException !=null)
{
Console.WriteLine(ex.InnerException);
}
Catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
6) Bodied Methods
Used for functions having single line return statement.
Older way
public static int GetSum(int a, int b)
{
return a+b;
}
Newer way
public static int GetSum(int a, int b) => a+b;
7) Using static
Previously for calling static methods or properties we need to write something like ClassName.MethodName() / ClassName.PropertyName. With new feature we don't need to invoke using ClassName but we have include using static System.ClassName (ex-: Convert) namespace. For following example include "using static System.Convert". You can also include "using static System.Console" to driectly call WriteLine() method of class Console.
Older way
Console.WriteLine("Enter any two numbers");
int a = Convert.ToInt32(Console.ReadLine());
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(Test.GetSum(a, b));
Newer way
Console.WriteLine("Enter any two numbers");
int a = ToInt32(Console.ReadLine());
int b = ToInt32(Console.ReadLine());
Console.WriteLine(Test.GetSum(a, b));
0 Comment(s)