当前位置: 首页 > 科技观察

.NET7为C#11和F#7带来更好的性能和新特性

时间:2023-03-12 04:00:07 科技观察

2022年11月8日,.NET7正式发布。Conf2022正在进行中,可在https://www.dotnetconf.net/上找到。微软现在越来越快了。我相信很多人在.NET6和7用于生产之前就已经发布了它们。让我们来看看新功能。.NET7为C#11/F#7带来更好的性能和新特性,体现在.NETMAUI、ASP.NETCore/Blazor、WebAPI、WinForms、WPF等。VisualStudio17.4.0支持.NET7,这是VisualStudio2022的第三个长期服务通道(LTSC),17.4LTSC将支持到2024年7月11日。如果你已经安装了VisualStudio2022,可以直接更新,也可以下载安装它通过以下地址:https://dotnet.microsoft.com/zh-cn/download。就个人而言,我更关心工具和语言。更新VisualStudio点击帮助中的CheckUpdate开始更新,需要等待更新下载完成:更新完成后重启电脑,然后打开VisualStudio,可以在framework选择中看到.NET7.0。VisualStudio改进的选择文本匹配项高亮可以在“工具->选项->文本编辑器->常规”界面和“显示选择匹配项”中开启。勾选该选项后,在编辑器中选中某个文本,编辑器中其他选中文本的地方会高亮显示,滚动条中也会显示标记,表示哪些位置与选中文本有相同的文本。目前,它只适用于短于200个字符的字符串,并且所有字符都在一行中。可以在“工具->选项->文本编辑器->常规”界面启用语音提示,需要重启VisualStudio才能生效。启用后,如果在编辑器中的某行设置了断点,或者该行代码出现警告或错误,当光标移动到该行时,VisualStudio会播放声音。因为断点有高亮背景色,所以有没有提示音都无所谓。警告和错误有时不容易看到,这个声音可以发挥作用。在调试DataTable可视化工具时,可以直接将DataTable打开成一个列表,在这个列表界面可以进行搜索导出到Excel。当然,VisualStudio17.4还有更多的新特性,大家可以参考以下地址:https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-4/。C#11C#中的原始字符串是用双引号引起来的字符串。这个内容里面可能有各种符号,比如:斜杠,双引号,单引号等等,就像json和xml内容一样。经常有双引号,之前需要用转义字符处理,但是在C#11中可以用三个引号来包含字符串内容,实现原字符串。这个功能真的很不错。[HttpGet]publicstringGet(){stringsql="""这是一个原始字符串,名称为"oec2003",加上斜线/a/b\c\d单引号''""";returnsql;}运行结果:Automaticdefaultstructure在C#10或更早版本中,创建结构体时,必须初始化所有字段值。如果任何字段没有初始化,就会出现编译错误。C#11引入了“自动默认结构”,它将字段初始化为默认值。比如在C#10中,会出现这样的错误:在C#11中,这段代码可以正常执行,Age会被初始化为0。Requiredmembers当一个类的属性需要在初始化时赋值,它们可以用required关键字修改:publicclassUser{publicrequiredstringUserName{get;在里面;}publicrequiredintAge{get;在里面;}}创建User对象时,如果不初始化UserName和Age,会报错,如下图:List模式从C#11开始,数组或列表可以匹配一个元素序列,它是一个组由方括号元素括起来,使用is关键字匹配。int[]testArray={1,2,3,5,8};boolresult=false;//结果值为假,最后一个数不匹配result=testArrayis[1,2,3,5,9];//结果值为假,元素的位置不同result=testArrayis[8,1,2,3,5];//结果值为假,长度不匹配result=testArrayis[1,2,3,5]];//结果值为真,元素,长度,位置都匹配result=testArrayis[1,2,3,5,8];列表模式有三种不同的方式:Discardpattern,Rangepattern,Varpattern丢弃模式:比如上面例子中的数组testArray,如果想知道第一个元素是否为1,可以这样写:int[]testArray={1,2,3,5,8};boolresult=false;//结果值为真,序列长度与数组匹配,首元素也为1result=testArrayis[1,_,_,_,_];序列的长度必须与数字相同。序列中不匹配的元素可以使用_忽略。范围模式:匹配时,如果序列中的元素个数未知,则可以使用范围模式。使用两个点可以指定任意数量的元素,两个点只能在序列中使用一次。int[]testArray={1,2,3,5,8};boolresult=false;//结果值为真,..表示5之前,_表示最后一个元素,本次匹配是倒数第二个是5result=testArrayis[..,5,_];var模式:在这种模式中,可以在var关键字后面加一个变量,匹配到的元素的值会赋给变量。int[]testArray={1,2,3,5,8};if(testArrayis[..,varlastNum]){//lastNum是8Console.WriteLine($"最后一个元素是:{lastNum}");}其他特性,比如:抽象静态成员等,我觉得可以单独写一篇文章介绍一下。最近因为项目原因,写了一些Java代码。相比之下,C#就太优雅了。希望.NET越来越好,在中国得到更多的认可。