首页 > 编程语言 >C# 中检查null的语法糖

C# 中检查null的语法糖

时间:2023-02-02 15:00:59浏览次数:39  
标签:Console string C# 语法 result WriteLine null public

前言C#处理null的几个语法糖,非常实用。(尤其是文末Dictionary那个案例,记得收藏)一、??如果左边是的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";

标签:Console,string,C#,语法,result,WriteLine,null,public
From: https://www.cnblogs.com/yakniu/p/17086031.html

相关文章

  • 常用的anaconda命令记录
    conda命令condacreate--nametestpython=3.7建立一个名字叫做test的,python版本为3.7的新环境。condaenvlist查看conda中的所有已安装的环境。pip命令pipins......
  • nginx 日志分析之 access.log 格式详解
    说明:access.log的格式是可以自己自定义,输出的信息格式在nginx.conf中设置一般默认配置如下:http{...log_formatmain'$remote_addr-$remote_user[$time_lo......
  • vue添加css样式的方式
    vue添加css样式的方式1、在.vue文件中引入css<stylescopedlang="scss"type="text/scss">@import"../css/style.css";</style> 2、直接在<style>中写......
  • 【分布式链路追踪】Skywalking分布式链路追踪基于Docker安装与使用
    1.服务监控三要素[1]服务监控需要满足的三要素分别如下:日志监控指标监控请求链路追踪服务监控只要能满足这三个要素,基本就能实现我们想要的监控效果。1.1.主流APM......
  • API(Calendar)
    Calendar代表系统当前的时间日历对象,可以单独修改获取时间中的年月日Calendar是一个抽象类,不能创建对象,获取Calendar日历类对象的方法:publicstatic  Calendar get......
  • 报错:Unexpected reserved word 'await'?
    async和await是成对出现的。会报上边的错是因为没有把async放在和await最近的函数上。举例:报错代码:1asyncconfirmAll(){2this.$refs['editeForm'].valida......
  • JavaScript的this指向详解
    一、概念:函数的上下文(this)由调用函数的方式决定,function是“运行时上下文”策略;函数如果不调用,则不能确定函数的上下文。二、规则:对象打点调用它的方法函数,......
  • EXCEL的各种“空”的区别:blank,““ , 0 ,以及 VBA里的各种空值:empty,null,nothing 等
    原文链接:https://blog.csdn.net/xuemanqianshan/article/details/111415364 1EXCEL里的几种空值:blank,“”,01.1EXCEL里,一般有两种空值:blank,“”1.1.1空值blank空值:b......
  • 【2023.02.01】在PVE上安装MacOS 13 Ventura
    【2023.02.01】在PVE上安装MacOS13Ventura本文参考链接:InstallingmacOS13VenturaonProxmox7.2–NicholasSherlock本次平台是i99980hk,CPU尽量新一点应该都可......
  • 【笔记向】package.json main 作用
    package.jsonmain作用在package.json文件中,"main"字段指定了这个包在被其他包依赖时,入口文件的文件名。例如,如果在package.json中的"main"字段被设置为"index.......