This is a continuation of my previous post, where I am trying to complete reading this book:
So, C# 7.0 also introduce pattern matching in switch statement. Consider below example function:
public static string detectParam(object o) { switch (o) { case int i when i > 10: return "Big Integer"; case int i: return "Integer"; case double d when d > 10: return "Big Double"; case double d: return "Double"; case string s: return "String"; default: return "Object"; case null: return "Null"; } }
We can then test the output of the function:
public static void Main() { object o = 15; Console.WriteLine($"{o} is {detectParam(o)}"); // 15 is Big Integer object o1 = 9; Console.WriteLine($"{o1} is {detectParam(o1)}"); // 9 is Integer object o2 = 15.1; Console.WriteLine($"{o2} is {detectParam(o2)}"); // 15.1 is Big Double object o3 = 9.9; Console.WriteLine($"{o3} is {detectParam(o3)}"); // 9.9 is Double object o4 = "15"; Console.WriteLine($"{o4} is {detectParam(o4)}"); // 15 is String object o5 = new Object(); Console.WriteLine($"{o5} is {detectParam(o5)}"); // System.Object is Object object o6 = null; Console.WriteLine($"{o6} is {detectParam(o6)}"); // is Null }
We can actually shorten the switch statement even further:
public static string detectParam(object o) { var result = o switch { int i when i > 10 => "Big Integer", int i => "Integer", double d when d > 10 => "Big Double", double d => "Double", string s => "String", null => "Null", _ => "Object" }; return result; }