千家信息网

C#10新特性有哪些

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,本篇内容主要讲解"C#10新特性有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#10新特性有哪些"吧!1、Natural types for la
千家信息网最后更新 2025年01月18日C#10新特性有哪些

本篇内容主要讲解"C#10新特性有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#10新特性有哪些"吧!

1、Natural types for lambdas

C# 10 可以更好做类型推断,很多时候编译器可以自动推断类型,我们可以不用再显式声明委托类型了

来看一个简单的示例:

// Func func = () => 1;var func = () => 1;// Func func2 = ()=>"Hello";var func2 = () => "Hello";

在之前的版本中我们是需要显式声明委托类型,如上述被注释的代码,在 C# 10 就可以直接使用 var 来声明由编译器去推断委托的类型

有些方法可能会有重载,支持不同的参数类型,编译不能直接推断出委托类型,我们可以指定输入参数类型,示例如下:

// Func parse = (string s) => int.Parse(s);var parse = (string s) => int.Parse(s);

2、Lambda Ref/Out/In Parameter Modifier

我们可以在指定输入参数类型的时候,可以设置 ref / out / int 来表示一个值类型的引用传递,

示例如下:

var refFunc = (ref int x) => { x++; };var outFunc = (out int x) => { x = -1; };var inFunc = (in int x) => { };var num = 1;refFunc(ref num);Console.WriteLine(num);outFunc(out num);Console.WriteLine(num);

输出结果分别是 2 和 -1

3、Lambda Return Type

C# 10 的委托可以指定返回类型,这样我们在返回委托的时候可能就会比较方便了,

比如下面的示例:

// return typevar lambdaWithReturnValue0 = int? () => null;// return type and input typevar lambdaWithReturnValue1 = int? (string s)    => string.IsNullOrEmpty(s) ? 1 : null;// Funcvar choose = object (bool b) => b ? 1 : "two";

这样就不需要显式声明委托类型了,在上面的基础上做了进一步的帮助编译器做推断

4、Natual types for method

对于能够推断出类型的方法,我们也可以使用 var 来声明委托,

示例如下:

// Action func3 = LocalMethod;var func3 = LocalMethod;void LocalMethod(string a){    Console.WriteLine(a);}var checkFunc = string.IsNullOrEmpty;var read = Console.Read;Action write = Console.Write;

对于不能推断类型的则需要显式声明类型委托类型,如上面最后一个委托 Console.Write 的参数会有多个重载,不能准确推断类型,所以需要声明委托类型

5、Lambda Attribute

现在我们可以在 Lambda 表达式中指定 Attribute

var parse3 =[Description("Lambda attribute")](string s) => int.Parse(s);var choose3 =[Description("Lambda attribute1")]object (bool b) => b ? 1 : "two";

这在 ASP.NET Core Minimal API 中也有应用,如:

app.MapPost("/todo", [Authorize]()=> "Success");

使用 ILSpy 查看低版本 C# 代码,生成代码如下:

[Description("Lambda attribute")]internal int 
b__4_0(string s){ return int.Parse(s);}[Description("Lambda attribute1")]internal object
b__4_1(bool b){ return b ? ((object)1) : "two";}

6、More

这些 Lambda 的优化可以让我们更加方便地使用 lambda,在 ASP.NET Core 中也有着很多的应用

app.Map("/", () => "Hello world");app.MapPost("/auth", [Authorize]()=> "Authorize needed");

在声明 Lambda 的时候可以自动转成 Expression ,我们也可以结合上面的新特性来声明,

示例如下:

Expression> expr = (string s) => int.Parse(s);LambdaExpression parseExpr = object (bool b) => b ? 1 : "two";Expression parseExpr1 = int? () => null;

到此,相信大家对"C#10新特性有哪些"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

类型 委托 推断 示例 特性 参数 时候 编译 代码 方法 编译器 面的 内容 版本 C# 学习 应用 输入 不同 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库实时存取串口数据 网络技术部工作职责和内容 关闭服务器的网站还能找到内容吗 网络技术支撑合同模板 易到服务器新消息 服务器过载后为什么排队 上游服务器云上摆摊 长途顺风车软件开发 网页php数据库关闭代码 电网网络安全 文件 软件开发员属于哪一类职业 青春中国网络安全大赛 本地建的数据库连接不上 哪里可以买奇迹服务器 天象网络技术骗局 资讯 科摩多网络安全套是什么 天津联想服务器虚拟化系统云空间 仓库数据库设计基础 数据库外码主码是什么意思 服务器访问异常是什么意思 用友软件中数据库技术的应用 2022年颁布网络安全的法律 服务器如何开放安全组 服务器无法上传数据 约会聊天软件开发 网络安全表扬通报 网络安全注意事项清单 运满满网络安全审查电话号码多少 数据库中什么情况下使用多表连接 山西企业软件开发哪家专业
0