C#7的主要特性

C#7引入了多项新特性,如数字字面量、改进的out关键字、模式匹配、值类型元组以及解构等。元组允许显式字段命名,提高了代码可读性,并可作为方法参数和返回值。模式匹配增强了is和case关键字的功能,而解构则允许从复杂类型中轻松提取所需数据。局部函数和更多表达式体成员的使用,使代码更加简洁高效。
摘要由CSDN通过智能技术生成

C#7集成到 .NET Framework4.6.2和Visual Studio2017中,增加了元组和模式匹配,使得C#更具函数式语言特点

要使用C#7的语法特性,需要 .NET Framework4.6.2或以上版本。Visual Studio2017的各个不同版本都预装了4.6.2或4.7,不过默认是使用4.6.1建立新工程,需要选择4.6.2或以上版本建立新工程,才能使用C#7新语法

1.数字字面量

现在可以在数字中加下划线,增加数字的可读性。编译器或忽略所有数字中的下划线

int million = 1_000_000;

虽然编译器允许在数字中任意位置添加任意个数的下划线,但显然,遵循管理,下划线应该每三位使用一次,而且,不可以将下划线放在数字的开头(_1000)或结尾(1000_)

2.改进的out关键字

C#7支持了out关键字的即插即用

var a = 0;
int.TryParse("345", out a);

// 就地使用变量作为返回值
int.TryParse("345", int out b);

允许以_(下划线)形式“舍弃”某个out参数,方便你忽略不关系的参数。例如下面的例子中,获得一个二维坐标的X可以重用获得二维坐标的X,Y方法,并舍弃掉Y:

struct Point
{
   
	public int x;
	public int y;
	private void GetCoordinates(out int x, out int y)
	{
   
		x = this.x;
		y = this.y;
	}
	public void GetX()
	{
   
		// y被舍弃了,虽然GetCoordinates方法还是会传入2个变量,且执行y=this.y
		// 但它会在返回之后丢失
		GetCoordinates(out int x, out _);
		WriteLine($"({x})");
	}
}

3. 模式匹配

模式匹配(Pattern matching)是C#7中引入的重要概念,它是之前is和case关键字的扩展。目前,C#拥有三种模式:

  • 常量模式:简单地判断某个变量是否等于一个常量(包括null)
  • 类型模式:简单地判断某个变量是否为一个类型的实例
  • 变量模式:临时引入一个新的某个类型的变量(C#7新增)

下面的例子简单地演示了这三种模式:

class People
{
   
	public int TotalMoney {
    get; set; }
	public People(int a)
	{
   
		TotalMoney = a;
	}
}
class Program
{
   
	static void Main(string[] args)
	{
   
		var peopleList = new List<People>() {
   
			new People(1),
			new People(1_000_000)
		};
		foreach (var p in peopleList)
		{
   
			// 类型模式
			if (p is People) WriteLine("是人");
			// 常量模式
			if (p.TotalMoney > 500_000) WriteLine("有钱");
			// 变量模式
			// 加入你需要先判断一个变量p是否为People,如果是,则再取它的TotalMoney字段
			// 那么在之前的版本中必须要分开写
			if (p is People)
			{
   
				var temp = (People)p;
				if (temp.TotalMoney > 500_000) WriteLine("有钱");
			}
			// 变量模式允许你引入一个变量并立即使用它
			if (p is People ppl && ppl.TotalMoney > 500_000) WriteLine("有钱");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值