標籤:c# ++ main 反射 img style tuple variables stat
來源參考:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-7
【VS2017支援】
1.out 變數(out variables)
以前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隱式類型
2.元組(Tuples)
一個方法有多個傳回型別值得解決方案,使用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#7.0新特性