C#7 语法特性

96 阅读1分钟

一、 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<int, (int min, int max)>()
{
    [2] = (4, 10),
    [4] = (10, 20),
    [6] = (14, 19),
};

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