C# 9 新特性 —— 增强的模式匹配
生活随笔
收集整理的這篇文章主要介紹了
C# 9 新特性 —— 增强的模式匹配
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C# 9 新特性 —— 增強(qiáng)的模式匹配
Intro
C# 9 中進(jìn)一步增強(qiáng)了模式匹配的用法,使得模式匹配更為強(qiáng)大,我們一起來(lái)了解一下吧
Sample
C# 9 中增強(qiáng)了模式匹配的用法,增加了 and/or/not 操作符,而且可以直接判斷屬性,來(lái)看一下下面的這個(gè)示例:
var?person?=?new?Person();//?or //?string.IsNullOrEmpty(person.Description) if?(person.Description?is?null?or?{?Length:?0?}) {Console.WriteLine($"{nameof(person.Description)}?is?IsNullOrEmpty"); }//?and //?!string.IsNullOrEmpty(person.Name) if?(person.Name?is?not?null?and?{?Length:?>?0?}) {if?(person.Name[0]?is?(>=?'a'?and?<=?'z')?or?(>=?'A'?and?<=?'Z')?or?'.'){} }//?not if?(person.Name?is?not?null) { }這里的代碼使用 DnSpy 反編譯之后的代碼是下面這樣的:
Person?person?=?new?Person(); string?text?=?person.Description; bool?flag?=?text?==?null?||?text.Length?==?0; if?(flag) {Console.WriteLine("Description?is?IsNullOrEmpty"); } text?=?person.Name; bool?flag2?=?text?!=?null?&&?text.Length?>?0; if?(flag2) {char?c?=?person.Name[0];if?(c?>=?'a'){if?(c?>?'z'){goto?IL_8B;}}else?if?(c?>=?'A'){if?(c?>?'Z'){goto?IL_8B;}}else?if?(c?!=?','?&&?c?!=?'.'){goto?IL_8B;}bool?flag3?=?true;goto?IL_8E;IL_8B:flag3?=?false;IL_8E:bool?flag4?=?flag3;if?(flag4){} } bool?flag5?=?person.Name?!=?null; if?(flag5) { }Switch
這不僅適用于 is 也可以在 switch 中使用
switch?(person.Age) {case?>=?0?and?<=?3:Console.WriteLine("baby");break;case?>?3?and?<?14:Console.WriteLine("child");break;case?>?14?and?<?22:Console.WriteLine("youth");break;case?>?22?and?<?60:Console.WriteLine("Adult");break;case?>=?60?and?<=?500:Console.WriteLine("Old?man");break;case?>?500:Console.WriteLine("monster");break; }反編譯后的代碼:
int?age?=?person.Age; int?num?=?age; if?(num?<?22) {if?(num?<?14){if?(num?>=?0){if?(num?>?3){Console.WriteLine("child");}else{Console.WriteLine("baby");}}}else?if?(num?>?14){Console.WriteLine("youth");} } else?if?(num?<?60) {if?(num?>?22){Console.WriteLine("Adult");} } else?if?(num?>?500) {Console.WriteLine("monster"); } else {Console.WriteLine("Old?man"); }More
可以看到有些情況下可以簡(jiǎn)化不少代碼,尤其是 if 分支比較多的情況下使用上面 switch 這樣的寫法會(huì)清晰很多
但是如果只是 string.IsNullOrEmpty 這種代碼最好還是不要寫得這么騷了,小心要被同事吐槽了
炫技需謹(jǐn)慎,小心被 ...
Reference
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9
https://github.com/WeihanLi/SamplesInPractice/tree/master/CSharp9Sample
https://github.com/WeihanLi/SamplesInPractice/blob/master/CSharp9Sample/PatternMatchingSample.cs
總結(jié)
以上是生活随笔為你收集整理的C# 9 新特性 —— 增强的模式匹配的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: . NET5一出,. NET岗面试普遍喊
- 下一篇: 前端数据层落地实践