首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#12 都有哪些新特性?

出品|开源中国

.NET 首席项目经理凯瑟琳在博客中介绍了 C# 12 的一些预览版新功能,这些功能可以在 Visual Studio 17.6 预览版和最新的.NET 8 预览版中体验。

C# 12 主要有如下新特性:

非记录类和结构的主构造函数

主构造函数允许将参数添加到类声明本身,并在类主体中使用这些值。

作为记录位置语法的一部分,主构造函数在 C# 9 中引入,而 C# 12 则将主构造函数扩展到所有类和结构

主构造函数的基本语法和用法:

public class Student(int id, string name, IEnumerable grades){    public Student(int id, string name) : this(id, name, Enumerable.Empty()) { }    public int Id => id;    public string Name { get; set; } = name.Trim();    public decimal GPA => grades.Any() ? grades.Average() : 4.0m; }

上面 Student 类中的主构造函数参数在类的整个主体中都可用。

所有类型均可使用 using 指令起别名

C# 12 将 using 指令支持扩展到任何类型,如:

using Measurement = (string, int);using PathOfPoints = int[];using DatabaseInt = int?;

可为几乎任何类型起别,如可空值类型,但不能为可空引用类型起别名。

元组比较特别,它可以包含元素名称和类型:

using Measurement = (string Units, int Distance);

可以在任何需要使用类型的地方使用别名。例如:

public void F(Measurement x){ }

lambda 表达式的默认值

C# 12 通过允许为参数指定默认值,进一步增强了 lambda 表达式的能力。

语法与其他默认参数相同:

var addWithDefault = (int addTo = 2) => addTo + 1; addWithDefault(); // 3addWithDefault(5); // 6

与其他默认值类似,lambda 的默认值将在元数据中发出,并可通过反射作为 lambdaMethod属性的ParameterInfoDefaultValue获得。例如:

var addWithDefault = (int addTo = 2) => addTo + 1; addWithDefault.Method.GetParameters()[0].DefaultValue; // 2

在 C# 12 之前,需要使用本地函数或System.Runtime.InteropServices命名空间中的DefaultParameterValue来为 lambda 表达式参数提供默认值。这些方法仍然有效,但难阅读,且与方法的默认值不一致。

关于上述 C# 12 新功能的详细信息,可以在文档中细阅:https://learn.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-12

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230412A02RDS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券