欢迎大家来到IT世界,在知识的湖畔探索吧!
起因
今天在更新.Net Runtime(2021-05-31)源码的时候,在is not null的用法,我们先看看如何使用.
is not null
由于个人习惯,在项目中不怎么使用is进行判断,需要类型转换的话,通常会使用as,具体原因是在 写更好的CSharp代码 ,有提到.这里就不多说了,看看新语法 is no null如何使用.
using System; namespace CharpLearning.Syntax { /// /// is not null 语法糖 /// 在C# 9 加入 /// public class LearnIsNotNull { public void IsNotNull(object obj) { //之前 if (obj != null) { Console.WriteLine("obj != null"); } //现在可以用,is not null只是语法糖,在编译时,会替换成"!=null" if (obj is not null) { Console.WriteLine("obj is not null"); } //obj is not null 反编译 /* if (obj != null) { Console.WriteLine("obj is not null"); } */ } } }
欢迎大家来到IT世界,在知识的湖畔探索吧!
is no null语法,只是语法糖,在编译时,会替换为!=null,以后看到语法不会茫然了.
is和模式匹配组合
欢迎大家来到IT世界,在知识的湖畔探索吧!namespace CharpLearning.Syntax { /// /// 增强的模式匹配 和is一起使用 /// c# 9 加入,其实也是语法糖 /// public class LearnPatternMatch { public bool IsAlpha(char c) { return c is >= 'a' and <= 'z' or >= 'A' and <= 'Z'; //JustDecompile反编译结果: /* bool flag; bool flag1; if (c >= 'a') { if (c <= 'z') { flag = true; flag1 = flag; return flag1; } } else if (c >= 'A') { if (c <= 'Z') { flag = true; flag1 = flag; return flag1; } } flag = false; flag1 = flag; return flag1; */ } } }
又是一个新的语法糖,这个使用就有点香,还是可以提高生产力,不过使用反编译工具ILSpy看的结果不是上面反编译的代码段,而是这样的.
/ CharpLearning.Syntax.LearnPatternMatch public class LearnPatternMatch { public bool IsAlpha(char c) { switch (c) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': return true; default: return false; } } }
这个从IL代码推测应该是JustDecomplie还原的更准确.我们看一下IL代码:
欢迎大家来到IT世界,在知识的湖畔探索吧!.class public auto ansi beforefieldinit CharpLearning.Syntax.LearnPatternMatch extends [System.Runtime]System.Object { .method public hidebysig specialname rtspecialname instance void .ctor () cil managed { IL_0000: ldarg.0 IL_0001: call instance void [System.Runtime]System.Object::.ctor() IL_0006: nop IL_0007: ret } .method public hidebysig instance bool IsAlpha ( char c ) cil managed { .locals init ( [0] bool V_0, [1] bool V_1 ) //判断>='a' a=97 IL_0000: nop IL_0001: ldarg.1 IL_0002: ldc.i4.s 97 IL_0004: blt.s IL_000d //判断<='z' 122 IL_0006: ldarg.1 IL_0007: ldc.i4.s 122 IL_0009: ble.s IL_0019 IL_000b: br.s IL_001d //判断>='A' A=65 IL_000d: ldarg.1 IL_000e: ldc.i4.s 65 IL_0010: blt.s IL_001d //判断<='Z' Z=90 IL_0012: ldarg.1 IL_0013: ldc.i4.s 90 IL_0015: ble.s IL_0019 IL_0017: br.s IL_001d IL_0019: ldc.i4.1 IL_001a: stloc.0 IL_001b: br.s IL_001f IL_001d: ldc.i4.0 IL_001e: stloc.0 IL_001f: ldloc.0 IL_0020: stloc.1 IL_0021: br.s IL_0023 IL_0023: ldloc.1 IL_0024: ret } }
个人能力有限,如果您发现有什么不对,请私信我
如果您觉得对您有用的话,可以点个赞或者加个关注,欢迎大家一起进行技术交流
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/90137.html