恒华大厦做网站公司,毕业设计代写网站,厦门市建设管理协会网站首页,集美区建设局网站一#xff1a;背景1. 讲故事上一篇C#9.0 终于来了#xff0c;您还学的动吗#xff1f; 带上VS一起解读吧#xff01;跟大家聊到了Target-typed new 和 Lambda discard parameters#xff0c;看博客园和公号里的阅读量都达到了新高#xff0c;甚是欣慰#xff0c;不管大家… 一背景1. 讲故事上一篇C#9.0 终于来了您还学的动吗 带上VS一起解读吧跟大家聊到了Target-typed new 和 Lambda discard parameters看博客园和公号里的阅读量都达到了新高甚是欣慰不管大家对新特性是多头还是空头起码还是对它抱有一种极为关注的态度所以我的这个系列还得跟那就继续开撸吧今天继续带来两个新特性更多新特性列表请大家关注新特性预览二新特性研究1. Native ints从字面上看貌似是什么原生类型ints有点莫名其妙还是看一看Issues上举得例子吧
Summary: nint i 1; and nuint i2 2;Shipped in preview in 16.7p1.
有点意思还是第一次看到有nint这么个东西应该就是C#9新增的关键词好奇心爆棚快来实操一下。static void Main(string[] args){nint i 10;Console.WriteLine($i{i});}
从图中看可以原样输出然后用ILSpy查查底层IL代码发现连IL代码都不用看????????????。如下图从图中看原来 nint 就是 IntPtr 结构体哈如果你玩过 C# 到 C 之间的互操作我相信你会对Ptr再熟悉不过了,从这个 nint 上看你不觉得C#团队对指针操作是前所未有的重视吗 前有指针类型IntPtr后有内存段处理集合Span到现在直接提供关键词支持就是尽最大努力让你在类型安全的前提下使用指针。这就让我想起了前些天写的一篇互操作的文章现在就可以用nint进行简化了来段代码给大家看一下。原来的写法[DllImport(ConsoleApplication1.dll, CallingConvention CallingConvention.Cdecl, CharSet CharSet.Ansi)]extern static IntPtr AddPerson(Person person);static void Main(string[] args){var person new Person() { username dotnetfly, password 123456 };var ptr AddPerson(person);var str Marshal.PtrToStringAnsi(ptr);}
IntPtr - nint 的写法总的来说这个关键词不是最重要的重要的是C#团队对指针操作抱有前所未有的重视这是一个非常积极的信号。2. Pattern matching improvements模式匹配这个不算是什么新特性了在本次C#9中也是继续得到了完善可能有很多朋友对模式匹配不是很熟悉毕竟是C#7才有的新玩法后面几乎每一个新版本都在跟踪完善我先科普一下吧。❤ 模式匹配到底解决了什么问题大家在编码的过程中不可能遇不到 if/else 嵌套 if/else 的这种情况有时候嵌套甚至达到56层之多特别影响代码可读性我就来YY个例子。现在各个地方都在发不同面值的消费券为了实现千人千面消费券的发放规则如下性别年龄地区面值男20安徽2000男40上海4000男剩余剩余3000女20安徽2500女60安徽1500如果用传统的方式你肯定要用各种花哨的if/else来实现如下代码static decimal GetTicketFee(string sex, int age, string area){if (sex 男){if (age 20 area 安徽){return 2000;}else{if (age 40 area 上海){return 4000;}else{return 3000;}}}else{if (age 20 area 安徽){return 2500;}if (age 60 area 安徽){return 1500;}}return 0;}
这种代码可读性不是一般的差就像大强子说的那样看着都想打人。。。问题来了这代码还有救吗当然有了这就需要用Pattern matching 去简化毕竟它就是为了这种问题而生的修改后的代码如下static decimal GetTicketFee_Pattern(string sex, int age, string area){return (sex, age, area) switch{(男, 20, 安徽) 2000,(男, 40, 上海) 4000,(男, _, _) 3000,(女, 20, 安徽) 2500,(女, 60, 安徽) 1500,_ 0};}
看到这种化简后的代码是不是非常惊讶这就是 Pattern matching 要帮你解决的场景接下来看看底层的IL代码是什么样子。从图中看这反编译后的代码比我手工写的还要烂无力吐槽哈当然 模式匹配 有各种千奇百怪的玩法绝对让你瞠目结舌更多玩法可参考官方文档模式匹配这个特性最重要的是你一定要明白它的客户群在哪里三总结总的来说这两个特性都是比较实用的尤其是 Pattern matching 化解了你多少不得不这么写的烂代码头发护理就靠它了快来给它点个赞吧好了,先就这样吧感谢您的阅读希望本篇对你有帮助谢谢。