As a C# .net developer you may be interested to know what are the C# new features in c# latest version!
Here learn some of cool latest features in c# programming, features like out variable, tuples, pattern matching , async main, default literal, discard, generalised async, lazy list etc.
You can experiment different version new features of C# by changing the C# development version in your visual studio.
If you want to change the version of C#, make the following changes in your Visual Studio project.
As a .Net C# developer you must know some of the new features in C# .Net
We can now declare out values inline as arguments, earlier it used to be like we need to declare the variable before using as a out parameter.
if (int.TryParse(input, out var result)) Console.WriteLine(result); else Console.WriteLine("Error, Could not parse input");
Now we can declare a variable with more than one data type
(string Alpha, string Beta) namedLetters = ("a", "b"); Console.WriteLine($"{namedLetters.Alpha}, {namedLetters.Beta}");
We can also write function which will return composite result
List<int> numbers = new List<int> { 1,5,9,15,43,61 }; var result = GetTopBottom(numbers); private static (int, int) GetTopBottom(IReadOnlyCollection<int> numbers) { int lowest = numbers.Min(n => n); int highest = numbers.Max(n => n); return (lowest, highest); }
C# 7.0 offers the features for pattern matching
We can check pattern using the is
Operator with Pattern Matching
class PatternMatchingExample { object[] data = { new Student("Arijit"), new Student("Kaykasha"),null, 39 }; void Test() { foreach (var item in data) { if (item is Student) { Student s = item as Student; Console.WriteLine(s.FullName); } else { Console.WriteLine("not a Student pattern"); throw new ArgumentNullException(nameof(item)); } } } }
Main is usually an entry point in a C# console application, but now we can have async Main method in C# 7.1
class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); MainAsync(args).GetAwaiter().GetResult(); Console.ReadLine(); } static async Task MainAsync(string[] args) { Console.WriteLine("Do Stuff"); await SomeAsyncMethod(); } public static async Task SomeAsyncMethod() { await Task.Run(() => { for (int i = 0; i < 10; i++) { Console.WriteLine("calling: " + DateTime.Now.Millisecond); } }); } }
We can use the default expression like example below.
static void DoSomething(string text = default) { int myNumber = default; Console.WriteLine(myNumber); Console.WriteLine($"text:{text}"); }
The new feature discards in C# enables a way to ignore some local variables.
The discards are basically the way to ignore local variables which are irrelevant for the purposes of the implementation. here is a realtime example of Discards in C#
var (_, _, roolNo, fullName, mobile)= GetStudentDetails(10); private static (string, DateTime, int, string, string) GetStudentDetails(int roolNumber) { string address=null; string fullName="arijit"; string mobile= "980000011"; DateTime DOB=DateTime.Now.AddYears(-18); int roolNo=10; return (address, DOB, roolNo, fullName, mobile); }
After c# 7.0 the next version was released as C# 8.0, not much new features but more of enhancement like pattern matching, asynchronous streams etc. C# 8.0 is supported for .NET Core 3.0 onwards framework and .NET Standard 2.1.
Latest features C# 9.0 brings many new features and enhancements, the new introduction of Record types, now like class we can create "record", like public record Car(string carType);
,
Learn more about C# 9.0 new features with real-time implementation example.
Microsoft also has released new version C# 10, C# 10 is supported on .NET 6
deconstruction with Assignment and declaration
(int x, int y) = point; // assignment: int x1 = 0; int y1 = 0; (x1, y1) = point;