范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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];         Console.WriteLine(result ?? "null"); // output:null     } } 注意,如果链式使用的过程中,只要前面运算中有一个是null,那么将直接返回null结果,不会继续计算。下面两个操作会有不同的结果。
  using System; public class C { public static void Main() { string[] i = null; Console.WriteLine(i?[1]?.Substring(0).Length);  //不弹错误  Console.WriteLine((i?[1]?.Substring(0)).Length)  // System.NullReferenceException: Object reference not set to an instance of an object.  } } 一些操作#//参数给予默认值 if(x == null) x = "str"; //替换 x ??= "str";   //条件判断 string x; if(i<3)      x = y; else  {       if(z != null) x = z;      else z = "notnull"; } //替换 var x = i < 3 ? y : z ?? "notnull"   //防止对象为null的时候,依然执行代码 if(obj != null)      obj.Act(); //替换 obj?.Act();  //Dictionary取值与赋值 string result; if(dict.ContainKey(key)) {     if(dict[key] == null) result = "有结果为null";     else result = dict[key]; } else      result = "无结果为null"; //替换 var result= dict.TryGetValue(key, out var value) ? value ?? "有结果为null" : "无结果为null"; 结语#
  原来新定的C# 11提供了一个新的??,话说我个人还是挺喜欢这个特性的,不管以什么形式出现吧,期待以后再见。
  C#中为了处理null给我们准备了许多的语法糖,只能说非常简便了。有很多人会说这个可读性不好,或者觉得这是"茴字的几种写法"似的歪门邪道,我只能说,传统的语法也不是说取消了,语言有发展,只要还是比较审慎的,我觉得还是一件好事。
  文章来自https://www.cnblogs.com/podolski/p/16184027.html

老将回归AMD首席独立GPU架构师跳槽回到英特尔IT之家2月20日消息,据Tomshardware报道,AMD独立GPU首席SoC架构师RohitVerma于本周早些时候跳槽到英特尔,担任独立GPUSoC的首席产品架构师。这次招美团站在餐饮行业对立面了吗?上周五,美团股价午后突然跳水,当天收跌14。86,令人大跌眼镜。这一跌幅已超过众多互联网巨头遭遇噩耗时的表现。前年11月4日,受蚂蚁金服暂停IPO公告影响,阿里巴巴股价下跌8。13从多核到众核处理器其实多核这个词已经流行很多年了,世界上第一款商用的非嵌入式多核处理器是2002年IBM推出的POWER4。当然,多核这个词汇的流行主要归功与AMD和Intel的广告,Intel与A新一轮爆发,英德等报道我们的骄人之处随着北京冬奥会的瞩目成果,人们发现,中国互联网科技在本次冬奥会正展现出全新的科技新高地。人工智能云播等互联网科技,揭开了互联网经济的底层逻辑。一场新的变革正在悄然展开。韩先驱经济报内蒙古科技成果登记数量首次破千近日,2021年度内蒙古自治区科技成果统计分析报告(以下简称分析报告)出炉,我区科技成果登记数量首次突破1000项。根据分析报告材料统计,2021年全区共登记科技成果1062项,较ampampquot吉利Smart项目首款车型命名1ampampquot车长达4290毫米来源中国经济网姜智文根据厂家发布的谍照,Smart1是一辆四门掀背车或跨界车,车长为4290毫米,比现款SmartForFour的3495毫米更长。在欧洲市场,1的竞争对手将是为数iPhone用户转小米已1年,差距真有点大,更新MIUI13后尤为明显对于学生党来说,如果不是家里有矿,换手机真的不是一件容易事,去年我就是攒了很久的钱,才把我已经用了快3年的iPhoneXR换成了当时刚出的Xiaomi11Pro。不得不说啊,近几年基于物联网上位APPPLC的远程控制系统设计引言随着工厂设备不断朝着大型化复杂化和自动化方向发展,设备的运行监控和维修难度日益增大,传统的设备故障事后维修与计划维修已经不适应精益生产需求,采用物联网上位机APPPLC的远程控苹果手机拍照很一般,为什么苹果会说比单反像机强?这是笑话吗?苹果手机拍照很一般?苹果说比单反相机强?笑话?这个问题很有意思,不知道出自哪里。无论手机相机都是获取图像的工具,仅仅是拍摄的一种方式而已,都能拍出好片,也都能拍出烂片!!!脖子上挂5G已成为中国的标配2021年我国手机生产商公布的绝大部分智能手机均支持5G网络,仅有一小部分中低端机器设备不支持5G网络受大家喜爱的Android旗舰级手机,例如华为集团P40产品系列小米手机10系安卓的四面等宽边框,为什么那么难?2017年9月13日,iPhoneX发布。除了骄傲的刘海全屏外,最美的是它的四个等宽边框。也就是说,四边屏幕的框架宽度是完全一致的,极简主义对称美学设计开创了一个新时代。当然,这个
百度都是假的真的傲腾安装教程在这里还可以加速从盘了前言大家久等了,上次测试视频说放傲腾的安装教程结果搞测试的时候把文档全丢了,一直拖着,想着过气产品大家也不会太过在意,没想到还是有挺多粉丝求教程。这个过气的傲腾内存的安装对很多人来我的内存它应该有自己的想法(教你怎么选择内存条)前言鱼与熊掌不可兼得,生活也是如此,生活中有很多事物不能够兼得,此时我们应该学会取舍,而难点就在于如何去做抉择。草鸡身为一个DIY玩家,很抱歉不能给Y友带好喝的心灵鸡汤来。但是!草你以为你配了根8G的内存就够了吗?其实远比你想象的复杂前言大家都知道,像4G,8G这样的内存容量关系着与CPU之间的带宽,决定可以同时运行软件的数量,而像1600,2133,2400等如此的频率则决定着与CPU交换数据的速度。另外内存普通显示器免费升级电竞显示器的方法前言在这个CPU内存疯狂超频,且一次又一次破世界记录科技下,关注过的人肯定会感觉这群超频选手特别溜,特别厉害。超频其操作复杂,相关专业知识要通透,动手能力也得好,这些结合起来,才会电脑价格涨了一波又一波但让你没想到的是3000吃个鸡依然很轻松前言最近有粉丝经常给草鸡私信询问装机配置推荐的事,草鸡意识到装机的型号搭配也是让小白们很头疼的问题。但是毕竟每个人的想法都不一样,偏爱的品牌也不一样,这里草鸡就给大家做个推荐搭配,解密让你肛要紧的电竞椅为什么这么贵前言这些年来,很多商品,但凡与某些关键字挂钩,价格就会蹭蹭的高一番,比如二次元电竞某某同款等等那么说到电竞上,除了电脑硬件或键盘鼠标外设上的各种战队推荐品牌,还有一个名为电竞椅的外机械键盘贵或便宜的原因都在这里了前言关于机械键盘的选择等问题网上是一抓一大把,草鸡这里也不作多说,主要讲一讲关于机械键盘同轴价格不一问题,让大家在日后挑选键盘时也有一个了解,挑准方向好选择。正文机械键盘能折腾的地DIY电脑配置选择的一些误区,拒绝入坑(上篇)前言罗列了一些关于DIY主机装机的一些比较常见的误区。今天这篇主要讲一下关于CPU的。尤其是小白,就特别要注意一下哟。Ps误区排名不分先后。正文壹玩游戏CPU核心越多性能速度越快理一万元买电脑还要装X,该怎么配?前言是草鸡低估了人民群众的消费能力,前面的3K预算的网游小钢炮完全不能满足大家,应要求出一个高配高逼格的主机配置指南。出于水冷太过麻烦,水冷配件价格也昂贵,更不是一时半会就能上手的TLC颗粒的固态硬盘真的没有MLC的好吗?现在就告诉你真相前言在2015年开始,固态硬盘的普及风暴已经便开始了,那会的固态价格也不算太高,120G的固态硬盘价格在三百多元,而一个1TB的机械硬盘价格也不足三百元。Y友在装机的时候普遍选择的电脑该买台式机还是笔记本?看完以后不纠结!前言今日天气逐渐转暖,太阳晒在身上有一种让人真正活着的感觉,我不禁发出一声呻吟诶嘘服。此时我收到一条企鹅消息,是很久未有联系的一个朋友发来的,我在诧异中点开了对话框。兄dei,我过