public static void Main()
Console.WriteLine("C# 8.0 New Feature Swtich Expressions ...");
ex_property_tuple_and_positional_patterns.print();
public class ex_switch_expressions
public static void print()
Console.WriteLine("[1] Swtich Expressions");
var (a, b, option) = (10, 5, "+");
var example1 = option switch
Console.WriteLine("Example-1: " + example1);
int example2 = value switch
Console.WriteLine("Example-2: " + example2);
Console.WriteLine("Example-3... ");
Calculation c1 = new Calculation(50, 10, "*");
Calculation c2 = new Calculation(50, 10, "+");
public Calculation(int a, int b, string operation)
this.Operation = operation;
this.ResultNumber = this.Operation switch
"+" => this.FirstNumber + this.SecondNumber,
"-" => this.FirstNumber - this.SecondNumber,
"/" => this.FirstNumber / this.SecondNumber,
"*" => this.FirstNumber * this.SecondNumber,
public int FirstNumber { get; set; }
public int SecondNumber { get; set; }
public string Operation { get; set; }
public int ResultNumber { get; set; }
Console.WriteLine($"{this.FirstNumber} {this.Operation} {this.SecondNumber} = {this.ResultNumber}");
public class ex_indices_and_ranges
public static void print()
Console.WriteLine("[2] Indices and Ranges");
Console.WriteLine($"Example-1: {week[d1]}, {week[d2]}");
var lastDayOldStyle = week[week.Length -1];
var lastDayNewStyle = week[^1];
Console.WriteLine($"Example-2: {lastDayOldStyle}, {lastDayNewStyle}");
Console.WriteLine($"Example-3... ");
Console.WriteLine($"Way-1 => ");
var days = week.ToList().GetRange(2, 3);
foreach(var item in days)
Console.WriteLine($"{item}");
Console.WriteLine($"Way-2 => ");
var days1 = week.Skip(2).Take(3);
foreach(var item in days1)
Console.WriteLine($"{item}");
Console.WriteLine($"Way-3 => ");
var days2 = week[1.. ^ 2];
foreach(var item in days2)
Console.WriteLine($"{item}");
public class ex_default_interface_members
public static void print()
Console.WriteLine("[3] default interface members");
Printer p = new Printer();
p.Print(".Net", "Fiddle");
IWriteLine obj = new WriteLine();
public interface IPrintable {
void Print(string header, string text);
public class Printer: IPrintable {
public void Print(string header, string text) {
Console.WriteLine($"header = {header} and text = {text}");
public interface IWriteLine
Console.WriteLine("Wow C# 8!");
public class WriteLine : IWriteLine
public class ex_static_local_functions
public static void print()
Console.WriteLine("[4] static local functions");
Employee emp1 = new Employee();
emp1.MethodWithLocalFunction(125);
emp1.MethodWithStaticLocalFunction(515);
public void MethodWithLocalFunction(int input)
Console.WriteLine($"Inside MethodWithLocalFunction, input: {input}.");
Console.WriteLine($"Inside LocalFunction, input: {input}.");
public void MethodWithStaticLocalFunction(int input)
Console.WriteLine($"Inside MethodWithStaticLocalFunction, input: {input}.");
StaticLocalFunction(input);
static void StaticLocalFunction(int input)
Console.WriteLine($"Inside StatucLocalFunction, input: {input}.");
public class ex_using_declarations
public static void print()
Console.WriteLine("[5] using declarations");
using(var fileStream = new FileStream("abcd.txt",FileMode.Open))
var fileName = "abcd.txt";
using var fileStream = new FileStream(fileName, FileMode.Open);
public class ex_nullable_reference_types
public static void print()
Console.WriteLine("[6] Nullable reference types");
string? nullableString = null;
Console.WriteLine(nullableString.Length);
public class ex_readonly_struct_members
public static void print()
Console.WriteLine("[7] readonly struct members");
Console.WriteLine(obj.Distance);
public double X { get; set; }
public double Y { get; set; }
public readonly double Distance => Math.Sqrt(X * X + Y * Y);
public class ex_null_coalescing_assignment
public static void print()
Console.WriteLine("[8] Null-coalescing assignment");
Console.WriteLine($"{i}");
Console.WriteLine($"{variable}");
public class ex_async_streams
public static async void print()
Console.WriteLine("[9] Async Streams");
await foreach (var number in GenerateSequence())
Console.WriteLine(number);
public static async System.Collections.Generic.IAsyncEnumerable<int> GenerateSequence()
for (int i = 0; i < 20; i++)
await System.Threading.Tasks.Task.Delay(100);
public class ex_property_tuple_and_positional_patterns
public static void print()
Console.WriteLine("[10] Property, Tuple, and positional patterns");
Address location = new Address();
Console.WriteLine(ComputeSalesTax(location, salePrice));
Console.WriteLine(RockPaperScissors("rock", "paper"));
Point2 obj = new Point2(1, 5);
Console.WriteLine(GetQuadrant(obj));
public static decimal ComputeSalesTax(Address location, decimal salePrice) => location switch
{ State: "WA" } => salePrice * 0.06M,
{ State: "MN" } => salePrice * 0.75M,
{ State: "MI" } => salePrice * 0.05M,
public static string RockPaperScissors(string first, string second) => (first, second) switch
("rock", "paper") => "rock is covered by paper. Paper wins.",
("rock", "scissors") => "rock breaks scissors. Rock wins.",
("paper", "rock") => "paper covers rock. Paper wins.",
("paper", "scissors") => "paper is cut by scissors. Scissors wins.",
("scissors", "rock") => "scissors is broken by rock. Rock wins.",
("scissors", "paper") => "scissors cuts paper. Scissors wins.",
static Quadrant GetQuadrant(Point2 point) => point switch
(0, 0) => Quadrant.Origin,
var (x, y) when x > 0 && y > 0 => Quadrant.One,
var (x, y) when x < 0 && y > 0 => Quadrant.Two,
var (x, y) when x < 0 && y < 0 => Quadrant.Three,
var (x, y) when x > 0 && y < 0 => Quadrant.Four,
var (_, _) => Quadrant.OnBorder,
public Point2(int x, int y) => (X, Y) = (x, y);
public void Deconstruct(out int x, out int y) =>
===>1 => switch expressions
===>2 => Indices and Ranges
===>3 => default interface members
===>4 => static local functions
===>5 => using declarations
===>6 => Nullable reference types
===>7 => readonly struct members
===>8 => Null-coalescing assignment
===>10 => Property, Tuple, and positional patterns
2 => Authentication and Authorization using filter
3 => Upload file validation using javascript
4 => Custom excel generation
5 => Show loader while pdf/report generate/download
6 => Data validation using Dataannotation
7 => Bundelling and minification using mvc
8 => Service based app architecture using mvc
9 => One image on another image
11 => Model state, check validate, add error, etc.
12 => C# new features all in detail like series