一、out输出参数
在以前使用out输出参数的时候,必须先定义变量,然后才能使用,例如:
先定义一个方法,方法参数是out类型的输出参数:
private void DoNoting(out int x, out int y) { x = 1; y = 2; }
以前版本的写法:
// 必须先定义i、j,才能使用out参数 int i = 0; int j = 0; this.DoNoting(out i, out j); Console.WriteLine($"i+j={i+j}");
在C#7.0中,可以不用先定义,就能够直接使用了:
this.DoNoting(out int x, out int y); Console.WriteLine($"x+y={x + y}"); this.DoNoting(out var l, out var m);
二、模式
/// <summary> /// 具有模式的 IS 表达式 /// </summary> /// <param name="o"></param> public void PrintStars(object o) { if (o is null) return; // 常量模式 "null" if (!(o is int i)) return; // 类型模式 定义了一个变量 "int i" i的值就是o的值 相当于is类型判断 Console.WriteLine($"i={i}"); }
使用方法:
this.PrintStars(null); this.PrintStars(3);
除了可以像上面那样使用外,还可以使用下面的方式:
private void Switch(string text) { int k = 100; switch (text) { case "Tom" when k > 10: // text="Tom"且k<10才会输出Tom Console.WriteLine("Tom"); break; case "Joe" when text.Length < 10: //text="Joe"且text的长度<10才会输出Joe Console.WriteLine("Joe"); break; case string s when s.Length > 7://模式 定义变量s,s就是text的值 Console.WriteLine(s); break; default: Console.WriteLine("default"); break; case null: Console.WriteLine("null"); break; } }
调用:
this.Switch(null); this.Switch("TomTomKevin"); this.Switch("JoeForest");
三、元组
先来看下面的两个方法:
/// <summary> /// 使用默认参数名称 /// </summary> /// <param name="id"></param> /// <returns></returns> private (string, string, string) LookupName(long id) // tuple return type { return ("first", "middle", "last"); } /// <summary> /// 不使用默认参数名称 /// </summary> /// <param name="id"></param> /// <returns></returns> private (string first, string middle, string last) LookupNameByName(long id) // tuple return type { return ("first", "middle", "last"); //return (first: "first", middle: "middle", last: "last"); }
调用:
// 使用默认参数名称:Item1、Item2、Item3 Console.WriteLine($"使用默认参数名称"); var result = this.LookupName(1); Console.WriteLine(result.Item1); Console.WriteLine(result.Item2); Console.WriteLine(result.Item3); // 不使用默认参数名称 Console.WriteLine($"不使用默认参数名称"); var result2 = this.LookupNameByName(1); Console.WriteLine(result2.first); Console.WriteLine(result2.middle); Console.WriteLine(result2.last); // 也可以使用默认参数名称 Console.WriteLine($"也可以使用默认参数名称"); Console.WriteLine(result2.Item1); Console.WriteLine(result2.Item2); Console.WriteLine(result2.Item3);
四、数字分割
如果数字太长,可以按照一定的位数用“_”进行分割,例如:
long big = 100_000_0000; Console.WriteLine($"big={big}");