Last active
June 28, 2016 08:58
-
-
Save adilmughal/89616986206ff06039e4 to your computer and use it in GitHub Desktop.
C# 6 new features
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Diagnostics; | |
using static System.Console; | |
namespace PlayingWithCSharp6 | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
StringInterpolationEnhancements(); | |
UsingStaticClassesDemo(); | |
NullPropgationFeature(new Student { Name = "Adil" }); | |
DictionaryInitializer(); | |
Console.ReadLine(); | |
} | |
public static void StringInterpolationEnhancements() | |
{ | |
string name = "Adil"; | |
DateTime date = new DateTime(2015, 03, 13, 10, 15, 0); | |
int versionYear = 2015; | |
// Previously in C# 5 | |
WriteLine(string.Format("This code was written by {0} on {1} using Visual Studio {2}", name, date, versionYear)); | |
// In C# 6 | |
WriteLine(string.Format($"This code was written by {name} on {date} using Visual Studio {versionYear}")); | |
// Infact you don't need to call string.format | |
WriteLine($"This code was written by {name} on {date} using Visual Studio {versionYear}"); | |
// This is especially handy when you add more parameters in string format over the time and the order get confusing | |
string content = "blog"; | |
WriteLine(string.Format("This {3} was written by {0} on {1} using Visual Studio {2}", name, date, versionYear, content)); | |
WriteLine($"This {content} was written by {name} on {date} using Visual Studio {versionYear}"); | |
} | |
public static void UsingStaticClassesDemo() | |
{ | |
//Previously in C# 5 | |
Console.WriteLine("This is how to use static classes"); | |
// In C# 6 by adding namespace | |
// using static System.Console; | |
WriteLine("Just call the static method directly"); | |
} | |
public static void NullPropgationFeature(Student student) | |
{ | |
// Previously in C# 5 | |
if (student != null) | |
{ | |
WriteLine(student.Name); | |
if (student.Courses != null) | |
{ | |
foreach (var course in student.Courses) | |
{ | |
WriteLine(course.Id); | |
} | |
} | |
} | |
//In C# 6 | |
WriteLine(student?.Name); | |
if (student.Courses != null) | |
{ | |
foreach (var course in student.Courses) | |
{ | |
WriteLine(course.Id); | |
} | |
} | |
} | |
private static void DictionaryInitializer() | |
{ | |
Dictionary<string, int> dictionary = new Dictionary<string, int> {["Year"] = 2015,["Month"] = 03,["Day"] = 15 }; | |
} | |
public class OtherEnhancements | |
{ | |
// A getter only property with readyonly backing field | |
public int DemoInt { get; } | |
// An auto property intialized with default value | |
public string DemoString { get; set; } = "Demo"; | |
public OtherEnhancements() | |
{ | |
// Assignment in constructor for getter only field behaves like readonly field | |
this.DemoInt = 100; | |
} | |
public void DemoMethod() | |
{ | |
try | |
{ | |
} | |
// catch exception with filters | |
catch (System.IO.FileNotFoundException exception) when (exception.FileName == "abc.txt") | |
{ | |
// handle only for particular file | |
// In previous version of C#, you have to check it inside | |
// and then re throw which would result in losing exception data | |
} | |
} | |
//Expression-bodied members | |
public override string ToString() => $"Value : {DemoInt}"; | |
} | |
public class Student | |
{ | |
public string Name { get; set; } | |
public IList<Course> Courses { get; set; } | |
} | |
public class Course | |
{ | |
public int Id { get; set; } | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment