首页 > 编程语言 >.NET 7 为 C# 11和F# 7 带来了更好的性能和新特性

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

时间:2023-10-24 11:07:33浏览次数:33  
标签:11 C# testArray Studio result NET

2022 年 11 月 8 日,.NET 7 正式发布了,从 11 月 8 号 到 10 号,线上的 .NET Conf 2022 会议正在举行,可以通过 https://www.dotnetconf.net/ 了解相关情况。

微软现在节奏越来越快,相信很多人还没在生产上使用 .NET 6 , 7 就发布了,先来看看都有什么新特性吧。

.NET 7 为 C# 11/F# 7 带来了更好的性能和新特性,体现在 .NET MAUI,ASP.NET Core/Blazor ,Web API,WinForms,WPF 等等。

.NET 7 在 Visual Studio 17.4.0 版本中支持,17.4.0 版本是 Visual Studio 2022的第三个长期服务渠道 (LTSC) ,17.4 LTSC 版本将支持到 2024 年 7 月 11 日。如果已经安装了 Visual Studio 2022 ,可以直接更新,也可以通过下面地址下载安装:

https://dotnet.microsoft.com/zh-cn/download。

我个人比较关注的是工具和语言。

更新 Visual Studio

在帮助中点击检查更新就可以启动更新,需要等待更新的下载:

.NET 7 为 C# 11和F# 7 带来了更好的性能和新特性_初始化

更新完成后重启电脑,再打开 Visual Studio ,就可以看到框架选择中有 .NET 7.0 了。

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

Visual Studio 的改进

选择文本匹配项高亮显示

在「工具->选项->文本编辑器->常规」界面可以开启「显示 selection 匹配项」。

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

勾选此项后,在编辑器中选择某个文本,编辑器其他有选择文本的地方会进行高亮显示,滚动条中也显示了标记来指示哪些位置有和选择文本相同的文本。

.NET 7 为 C# 11和F# 7 带来了更好的性能和新特性_初始化_04

目前,它只适用于长度小于 200 个字符的字符串,并且所有字符都在一行上。

音频提示

在「工具->选项->文本编辑器->常规」界面可以开启启用音频提示,需要重新启动 VisualStudio 生效。

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

启用后,编辑器中某一个行设置了断点,或者这一行的代码有警告或者错误,光标移动到这一行时,Visual Studio 会播放一个声音。

断点因为有高亮背景色,有没有提示音都行,警告和错误,有时不太容易看出来,这个声音就能起到作用了。

DataTable 可视化工具

在调试时,DataTable 可以直接打开成一个列表,在这个列表界面中可以进行搜索和导出成 Excel 。

.NET 7 为 C# 11和F# 7 带来了更好的性能和新特性_初始化_06

当然,Visual Studio 17.4 还有更多的新增特性,可以参考下面地址:

https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-4/。

C# 11

原始字符串

在 C# 中字符串是用双引号包含起来的内容,这个内容中可能还会有各种符号,比如:斜杠、双引号、单引号等等,像 json 、xml 内容中就经常出现双引号,之前需要使用转义符来进行处理,而在 C# 11 中可以使用三个引号包含字符串内容,来实现原始字符串,这个功能真是太喜欢了。

复制
[HttpGet]
public string Get()
{
 string sql = """这是一个原始字符串,名字为"oec2003",加上斜杠/a/b \c\d 单引号 ''""";

 return sql;
}1.2.3.4.5.6.7.

运行结果:

.NET 7 为 C# 11和F# 7 带来了更好的性能和新特性_初始化_07

自动默认结构

在 C# 10 或更早版本中,创建结构时,必须初始化所有字段值。如果有字段没有初始化,会有编译错误。C# 11 引入了 「自动默认结构」,它会初始化字段为默认值。

比如在 C# 10 中,会出现这样的错误:

.NET 7 为 C# 11和F# 7 带来了更好的性能和新特性_字符串_08

C# 11 中这段代码是可以正常执行,Age 会被初始化为 0 。

必要成员

当一个类的属性需要强制在类初始化时进行赋值的时候,就可以用 required 关键字进行修饰:

复制
public class User
{
 public required string UserName { get; init; }
 public required int Age { get; init; }
}1.2.3.4.5.

在创建 User 对象时,如果没有初始化 UserName 和 Age 就会出现错误,如下图:

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

列表模式

从 C# 11 开始,数组或列表可以与元素序列相匹配,元素序列就是一组由中括号括起来的元素,匹配使用 is 关键字。

复制
int[] testArray = { 1, 2, 3, 5, 8 };
bool result = false;
// result 值为 false, 最后一个数字没有匹配
result = testArray is [1, 2, 3, 5, 9];
// result 值为 false, 元素的位置不一样
result = testArray is [8, 1, 2, 3, 5];
// result 值为 false, 长度没有匹配
result = testArray is [1, 2, 3, 5];
// result 值为 true, 元素、长度、位置都匹配
result = testArray is [1, 2, 3, 5, 8];1.2.3.4.5.6.7.8.9.10.

列表模式有三种不同的方式:Discard pattern、Range pattern、Var pattern

Discard pattern:

比如还是上面例子中的数组 testArray ,想要知道是否匹配第一个元素为 1 ,可以这样来实现:

复制
int[] testArray = { 1, 2, 3, 5, 8 };
bool result = false;
// result 值为 true,序列的长度和数组匹配,第一个元素也是 1
result = testArray is [1, _, _, _, _];1.2.3.4.
  • 序列的长度要和数字相同。
  • 序列中不用匹配的元素可以使用 _ 进行忽略。

Range pattern:

在匹配时,如果序列中元素个数是未知的,那么 Range pattern 就可以起作用。使用两个点可以用来指定任意数量的元素,两个点只能在序列中使用一次。

复制
int[] testArray = { 1, 2, 3, 5, 8 };
bool result = false;
// result 值为 true,.. 表示 5之前的,_ 表示最后一个元素,这个匹配的是倒数第二个是 5
result = testArray is [..,5,_];1.2.3.4.

Var pattern:

在这个模式中,可以在 var 关键字后面加变量,匹配上的元素的值会赋值给变量。

复制
int[] testArray = { 1, 2, 3, 5, 8 };
if(testArray is [..,var lastNum])
{
    // lastNum 的之为 8
    Console.WriteLine($"最后一个元素是:{lastNum}");
}1.2.3.4.5.6.

其他的特性,如:对静态成员进行抽象等,我觉得可以单独写文章来介绍。

最近因为项目原因,写了一些 Java 代码,相比之下,C# 优雅太多了,希望 .NET 能越来越好,在国内得到更多的认可。



标签:11,C#,testArray,Studio,result,NET
From: https://blog.51cto.com/u_11990719/8001554

相关文章

  • MVC和MVVM
    MVCMVC全名是ModelViewController,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。View(视图)应用程序中处理数据显示的部分。Controller(控制器)是应用程序中处理用户交互的部分。缺点:前后端职责纠缠不清......
  • 微软的.NET 8第二个预览版
    微软的.NET 8第二个预览版只是对第一次预览的“快速跟进”,主要改进了Blazor,用C#创建Web应用程序,而不是使用JavaScript。 预览2的改进虽然预览2引入了一些新的库功能,但Blazor方面的东西得到了一个高性能的网格组件,用于以表格形式显示数据,即QuickGrid。另一个改进是通过jiterpreter......
  • 微软今天发布了.NET 8 的首个预览版,正式版预估今年 11 月发布
    IT之家2月22日消息,微软今天发布了.NET8的首个预览版,适用于Windows、macOS和Linux的版本已经开发下载。微软计划未来每月发布新的预览版和候选版本,正式版预估将于今年11月在.NETConf2023上发布。 IT之家附.NET8的首个预览版的主要更新内容:NativeAhead-of-Time(AO......
  • 什么是敏捷开发中的scrum模型?
    Scrum是一种敏捷软件开发的框架。敏捷开发是一种迭代和增量的开发方法,它强调灵活性、快速反应和客户协作。Scrum特别适合于处理那些需求不断变化,或者不太清楚需求的复杂项目。它是一个轻量级的过程框架,用于管理复杂的创新性工作,它提高了团队之间的沟通和协作能力。 Scrum包括三个......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)
    在我们的SqlSugar的开发框架中,整合了Winform端、Vue3+ElementPlus的前端、以及基于UniApp+Vue+ThorUI的移动前端几个前端处理,基本上覆盖了我们日常的应用模式了,本篇随笔进一步介绍前端应用的领域,研究集成WPF的应用端,循序渐进介绍基于CommunityToolkit.Mvvm和HandyControl的WPF应用......
  • c++中的宏#define用途
    宏的一些作用,包括但不限于这些定义一个变量、字符串、类型定义一个函数、条件表达式条件编译、调试信息,异常类定义结构体、命名空间定义模版、枚举、函数对象#define宏定义在C++中用于定义常量、函数、条件编译、字符串、条件表达式、变量、注释、调试信息、类型、函数等,下面是一些......
  • C++的编译链接与在vs中build提速
    通过gcc或msvc,clang等编译器编译出来的C++源文件是.o文件。在windows上也就是PE文件,linux为ELF文件,在这一步中,调用其它代码文件中的函数的函数地址是未知的(00000),等到链接之后才会替换掉函数地址的linux,windows可执行文件(ELF、PE)C++是如何编译的C/C++编译过程主要分为4个过程......
  • Cinema 4D 2023图文安装教程及下载
    Cinema4D(简称C4D)是一款专业的3D建模、动画和渲染软件,由德国公司Maxon开发。它广泛应用于影视、游戏、广告等行业,具有操作简单、功能强大、渲染速度快等优点。Cinema4D2023版本提供了最主要的功能-全面的对称性建模、本地资产管理和原生OCIO支持。更新引入了用于创建火焰、烟雾和......
  • 升级Lync Server 2013到Skype for Business 2019(二十)
    写在前面在上一章我们完成了持久聊天服务器下线,本章我们将介绍如何下线LyncServer2013前端服务器。前端服务器功能移除打开拓扑生成器,下载最新的拓扑。导航到Lync2013前端服务器池,编辑属性。取消勾选如下功能,之后点击OK。ConferencingEnterpriseVoiceArchivingMonitoring发布拓......
  • 什么是CRM投资回报率?
     CRM自诞生以来,就一直受到各行业企业的追捧。尤其在数字化时代,CRM客户关系管理系统可谓是企业提升效益的必备单品。但是,并不是所有的企业都从CRM中获得收益,这是横亘在CRM与企业之间的一大难题。所以,下面我们来说说,什么是CRM投资回报率?什么是CRM投资回报率较为传统的CRM系统,需......