theme: smartblue
一、 out 变量
1.1 原写法
``` string number = "123";
int res ;
if(int.TryParse(number,out res)) { Console.WriteLine("result is " + res); } else { Console.WriteLine($"{number} can not convert to int"); }
Console.WriteLine(); ```
1.2 修改后
``` string number = "123";
if(int.TryParse(number,out var res)) { Console.WriteLine("result is " + res); } else { Console.WriteLine($"{number} can not convert to int"); }
Console.WriteLine(); ```
二、 元组简单化
2.1 原写法
Tuple<int, int> tuple1 = new Tuple<int, int> (1, 2);
2.2 修改后
(int, int) tuple2 = (3, 4);
并且可以自定义输出名称:
``` // 输出元素 (int, int) tuple2 = (3, 4); Console.WriteLine(tuple2.Item1); Console.WriteLine(tuple2.Item2);
// 自定义名称输出 (int element1, int element2) tuple3 = (5, 6); Console.WriteLine(tuple3.element1); Console.WriteLine(tuple3.element2); ``` 还可以 自动判断 初始化类型,
var tuple4 = (sum: 8.5, count: 2); Console.WriteLine(tuple4.sum); Console.WriteLine(tuple4.count);
与上文的 out 结合使用
``` var dic = new Dictionary
if(dic.TryGetValue(4,out (int min,int max) item)) { Console.WriteLine($"min is {item.min}, max is {item.max}"); } ```
三、 模式匹配
``` object? maybe = "123";
if(maybe is int number) { Console.WriteLine($"value is {number}"); } else if(maybe is not null) { Console.WriteLine("valie is not null"); } else { Console.WriteLine("value is null"); } ```
四、 命名参数 & 默认参数
``` void MyFunction(string? name,int? age,DateTime? time ) { // do..... };
MyFunction("xyy",24,new DateTime()); ``` 可以打乱传入参数顺序
MyFunction(age : 24, time: new DateTime(), name:"xyy");
在定义方法时,可以指定初始化参数,当没有值传入时,自动取默认值
``` void MyFunction(string name = "Sunny",int age = 0,DateTime time = new DateTime() ) { // do..... };
MyFunction(time: new DateTime(), name:"xyy"); ```
五、 ref变量
使用ref之后,相当于双方绑定
``` int n2 = 20; ref int n1 = ref n2;
Console.WriteLine($"n1: {n1}, n2: {n2}");
n1 = 10; Console.WriteLine($"n1: {n1}, n2: {n2}");
n2 = 5; Console.WriteLine($"n1: {n1}, n2: {n2}"); 执行结果如下:
n1: 20, n2: 20 n1: 10, n2: 10 n1: 5, n2: 5 ```