首页 > 编程语言 >C#中配合?操作符检查null的语法糖

C#中配合?操作符检查null的语法糖

时间:2023-01-29 16:37:01浏览次数:37  
标签:Console string C# System 操作符 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
    }
}
复制代码

 

?[]

索引器操作,和上面的操作类似,如果操作数为null,则不会进行后面的索引取值操作。

复制代码
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";
复制代码

  

 

出处:https://www.cnblogs.com/dotnet-college/p/17067371.html

标签:Console,string,C#,System,操作符,WriteLine,null,public
From: https://www.cnblogs.com/mq0036/p/17073033.html

相关文章

  • Launcher启动器
    由Launcher负责调用HotSpot的核心代码对JVM执行初始化,以及由它负责维护JVM的整个生命周期。Launcher是一种用于启动JVM进程的启动器,并且可以根据类型划分为两种不同的Launch......
  • BFC是什么?有什么作用
    Blockformattingcontext:块级格式化上下文1.前言官方文档解释为:一个BFC区域包含创建该上下文元素的所有子元素,但是不包括创建了新的BFC的子元素的内部元素,BFC是一块块独立......
  • 【双指针】LeetCode 16. 最接近的三数之和
    题目链接16.最接近的三数之和思路借鉴【双指针】LeetCode15.三数之和的思路,只不过把0换成target代码classSolution{publicintthreeSumClosest(int[]n......
  • 过滤和监听 c# java
    用JAVA开发WEB项目时,在处理特殊的HTTP请求,或全局处理一些页面代码时会用到监听器、过滤器,jsp--过滤器与监听器1.过滤器1.1简介过滤器是处于客户端与服务器资源文件之......
  • 【原型设计】进阶玩法:试试引入EChart
    【原型设计】进阶玩法:试试引入EChart......
  • MySQL 备份工具 XtraBackup 系列4 --- 定时任务
    一、承上启下1.XtraBackup安装https://www.cnblogs.com/eagle6688/p/17066856.html2. XtraBackup备份https://www.cnblogs.com/eagle6688/p/17072925.html3. XtraB......
  • 【Demo】Python + Echarts 简易实现一个数据分布图
    文章目录​​前言​​​​需求​​​​最终实现​​​​源码​​​​1.统计各省市总数量​​​​excle源文件示例​​​​统计​​​​2.Echarts的使用​​​​所需文件​​......
  • VC++的Unicode编程
    一、什么是Unicode先从ASCII说起,ASCII是用来表示英文字符的一种编码规范。每个ASCII字符占用1个字节,因此,ASCII编码可以表示的最大字符数是255(00H—FFH)。其实,英文字符......
  • 转 前端开发常用css知识点 认识字就能学。
    前端开发:CSS相关的核心知识点置顶三掌柜666已于2022-10-1101:20:38修改220收藏2文章标签:csshtml前端版权前言在前端开发过程中,有三驾马车组成:JS、CSS、HTML,JS负......
  • 常用DOC命令
    打开CMD的方法开始+系统+命令提示符Win键+R输入cmd打开控制台(推荐使用)在任意的文件夹下面,按住shift键+鼠标右键点击,在此处打开命令行窗口资源管理器的地址栏前面加......