C#7 语法特性

发布于:2024-06-28 ⋅ 阅读:(16) ⋅ 点赞:(0)

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 ```