电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

C#中检查null的语法糖

来源:金蝶云社区作者:金蝶2024-09-163

C#中检查null的语法糖

C#中检查null的语法糖


今天看到已经更新了devblogs,新增的C# 11的!!(用于检查null的语法)经过非常长的讨论,最后取消了。然后我又想起来null检查,这个可以说一说。

函数参数null检查

传统写法

写一个函数的时候,最经典的检查,估计也是大家最常使用的null检查,应该是这样的吧:


public static void GetV1(string prompt){    if (prompt is null) throw new ArgumentNullException(nameof(prompt));    Console.WriteLine(prompt);}


ThrowIfNull

这个写起来也没啥问题,但是总觉得有点不舒适。.NET 6在ArgumentNullException中新增了ThrowIfNull方法,可以写的更优雅一点。

public static void GetV2(string prompt){    ArgumentNullException.ThrowIfNull(prompt);    Console.WriteLine(prompt);}

异常的时候,就会出现:


System.ArgumentNullException: 'Value cannot be null. (Parameter 'prompt')'

。这个是不是简单了点?可是还是需要写一行。

C# 11的!!语法(已经取消)

C# 11刚preview的时候,我就瞄到了这个特性,现在依然可以通过设置preview来进行启用,但是以后正式发布估计就不行了。

它通过在参数后面叠加!!表示此参数不可为空,运行时会自动进行检查,如果是null就直接弹出错误。

public static void GetV3(string prompt!!){    Console.WriteLine(prompt);}

这个代码会被编译器翻译成:

public static void GetV3(string prompt!!){    if (prompt is null) {        throw new ArgumentNullException(nameof(prompt));    }    Console.WriteLine(prompt);}

这样大家就可以专注于业务代码,不需要经常考虑异常检查了。至于为什么这个东西最后还是被删除了,可以从讨论中看到一丝端倪,首先是感觉非常纠结于这个语法,两个叹号;然后就是已经有比较多的方式可以实现检查了,这个东西是否有必要。反正最终是以后再讨论了,不过也可以看出来C#语言工作组对语言的特性讨论非常谨慎。

他们还讨论了很多别的形式,每种都提出了各自的优缺点挺有意思的,能看出来有一点设计语言的严谨和小强迫症在,点赞~


void M(string s!!);void M(string! s);void M(string s!);void M(notnull string s);void M(string s ?? throw);void M(string s is not null);void M(checked string s);void M(string s) where s is not null;

有关null的一些操作

说起这个,就顺便说说c#处理null的另外几个语法糖吧。

??

如果左边是的null,那么返回右边的操作数,否则就返回左边的操作数,这个在给变量赋予默认值非常好用。


int? a = null;int b = a ?? -1;Console.WriteLine(b);  // output: -1

??=

当左边是null,那么就对左边的变量赋值成右边的


int? a = null;a ??= -1;Console.WriteLine(a);  // output: -1

?.

当左边是null,那么不执行后面的操作,直接返回空,否则就返回实际操作的值。

using System;public class C {    public static void Main() {        string i = null;        int? length = i?.Length;        Console.WriteLine(length ?? -1); //output: -1    }}

?[]

索引器操作,和上面的操作类似


using System;public class C {    public static void Main() {        string[] i = null;        string result = i?[1];       

C#中检查null的语法糖

C#中检查null的语法糖今天看到已经更新了devblogs,新增的C# 11的!!(用于检查null的语法)经过非常长的讨论,最后取消了。然后我又想起来...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信