标签:c# ++ main 反射 img style tuple variables stat
来源参考:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-7
【VS2017支持】
以前out参数需要在调用方法外部提前被声明,C#7.0允许out参数在方法参数传递中被声明。
旧写法:
int num; if (int.TryParse("123", out num)) { Console.WriteLine(num); } else { Console.WriteLine("Could not parse!"); }
新写法:
if (int.TryParse("123", out int num)) { Console.WriteLine(num); } else { Console.WriteLine("Could not parse!"); }
out参数在方法中声明支持var隐式类型
一个方法有多个返回类型值得解决方案,使用Tuples。
旧写法:
static void Main(string[] args) { var data = GetFullName(); Console.WriteLine(data.Item1); Console.WriteLine(data.Item2); Console.WriteLine(data.Item3); } static Tuple<string, string, string> GetFullName() { return new Tuple<string, string, string>("a", "b", "c"); }
新写法:[需要通过nutget获取System.ValueTuple的引用]
static void Main(string[] args) { var data = GetFullName1(); Console.WriteLine(data.a); Console.WriteLine(data.b); Console.WriteLine(data.c); } static (string a, string b, string c) GetFullName1() { return ("a", "b", "c"); }
解构元组获取返回值(多个):
static void Main(string[] args) { //不用var 定义解构元组 (string a, string b, string c) = GetFullName1(); Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); } static (string a, string b, string c) GetFullName1() { return ("a", "b", "c"); }
3.pattern matching(匹配模式)
判断类型时直接赋值。
旧写法:
object obj = 1; if (obj is int) //is判断 { int num1 = (int)obj; //拆 int num2 = num1 + 10; //加10 Console.WriteLine(num2); //输出 }
新写法:[使用反射时,考虑使用这种写法]
object obj = 1; if (obj is int num1)//判断obj为int型,直接赋值给num1 { int num2 = num1 + 10; Console.WriteLine(num2); //输出 }
switch的新玩法:
static dynamic Add(object a) { dynamic data; switch (a) { case int b: data = b++; break; case string c: data = c + "aaa"; break; default: data = null; break; } return data; }
标签:c# ++ main 反射 img style tuple variables stat
原文地址:http://www.cnblogs.com/DaphneOdera/p/7266353.html