一、 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