首页 > 编程语言 >C#中检查null的语法糖,非常实用

C#中检查null的语法糖,非常实用

时间:2023-01-25 22:34:42浏览次数:42  
标签: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
    }
}

 

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

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#,System,语法,WriteLine,null,public
From: https://www.cnblogs.com/dotnet-college/p/17067371.html

相关文章

  • (2)从txt读取GPS数据 真实GPS和slam定位GPS匹配 坐标系ecef和enu转化 计算均方根误差和
        #!/usr/bin/python#-*-coding:UTF-8-*-importnumpyasnpimportos#==========================1坐标系转换函数API===================......
  • 《RPC实战与核心原理》学习笔记Day8
    09|健康检测:这个节点挂了,为啥还要疯狂发请求?服务调用方在每次调用服务提供方的服务时,RPC框架会根据路由和负载均衡算法选择一个具体的IP地址,为了保证请求成功,我们需要确......
  • logback 日志应用
    <?xmlversion="1.0"encoding="UTF-8"?><!--scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod:设置监测配置文件是否有......
  • CF850F 题解
    题意传送门有一袋\(n\)个颜色球,第\(i\)个颜色的球有\(a_i\)个。当袋子里至少有两个不同颜色的球时,执行以下步骤:一个接一个的按照顺序随机取出两个的球,这些球......
  • 获取Tomcat安装包
    //友情提醒:请不要把Tomcat安装在有空格或中文的目录下面,不然有可能出现问题!//Tomcat官网​​​http://tomcat.apache.org/​​ //直至2012.10.26日最新版Tomcat7.0.32下载......
  • C#同时播放两首音乐
        说同时播放两首音乐有点不妥,因为这样没什么意义。今天我想说的是在播放背景音乐的同时,可以播放音效,类似于游戏中的声音。我们都知道在游戏中不仅有背景音乐,还有......
  • 解决C#用BindingSource控件绑定数据源时产生的错误
    今天在VS2008中用BindingSource控件绑定SQL2005数据库时出现了一个错误,提示信息如下:错误信息:未能从程序集Microsoft.VisualStudio.DataDesign.SyncDesigner.DslPackage,V......
  • VS2008使用Access数据库,不能更新数据库中数据的原因
    参考文章:​​http://zhidao.baidu.com/question/150772502.html​​本文关键词:VS2008运行工程,Access数据库中的数据更新不了,数据库中的数据被还原,数据添加不了,往数据库添......
  • Day01 - HTML&CSS
    1.html介绍简介html叫超文本标记语言,是开发网页的语言html中的标签大多数都是成对出现的,格式:<标签名></标签名>html的定义HTML的全称为:HyperTextMark-upLa......
  • Ceph MDS服务的多主一备高可用架构
      cephmds高可用  Cephmds(metadataservice)作为ceph的访问入口,需要实现高性能及数据备份,而MDS支持多MDS结构,甚至还能实现类似于rediscluster的多主从结......