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

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

时间:2023-01-29 10:47:25浏览次数:33  
标签: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/sexintercourse/p/17071970.html

相关文章

  • groovy-eclipse-compiler
    usecompiler默认javac改为groovy-eclipse <plugin><artifactId>maven-compiler-plugin</artifactId><!--2.8.0-01andlaterrequiremaven-compiler-plugi......
  • docker安装Mysql5.7
    Linuxdocker安装Mysql1.docker镜像地址配置vim/etc/docker/daemon.json2.加入配置信息{"registry-mirrors":["https://wghlmi3i.mirror.aliyuncs.com","https://d......
  • Java与opc通信之二 - s7协议(HslCommunication)
    1、引入依赖<dependency><groupId>com.github.dathlin</groupId><artifactId>HslCommunication</artifactId>......
  • C#判断一个IP是否在某个IP段内
    关于IP地址IPv4地址是由4段0-255的数字组成的,例如:a.b.c.d(0≤a,b,c,d≤255),IPv4也叫32位地址,为什么是32位呢,因为把每一段转换成二进制后,它的取值范围就是00000000-111111......
  • 黑马程序员前端-HTML+CSS之定位(position)的应用
     前端学习笔记教程不定期更新中,传送门:​​前端HTML第一天:什么是网页?什么是HTML?网页怎么形成?​​​​黑马程序员前端-CSS入门总结​​​​黑马程序员前端-CSS之emmet语法​......
  • Luminar Neo for Mac(AI技术图像编辑软件) 1.6.3激活版
    LuminarNeo是一款AI技术图像编辑软件,采用灵活高效的AI技术,能够用来编辑各种复杂的图像,功能是极其强大的。该软件有着非常直观自由度超高的用户界面,不管是对于新手还是专业......
  • 黑马程序员前端-CSS练手之学成在线页面制作
     前端学习笔记教程不定期更新中,传送门:​​前端HTML第一天:什么是网页?什么是HTML?网页怎么形成?​​​​黑马程序员前端-CSS入门总结​​​​黑马程序员前端-CSS之emmet语法​......
  • MySQL基础:通过SQL对数据库进行CRUD
    MySQL基础今日目标:能通过SQL对数据库进行CRUD文章目录MySQL基础一、MySQL数据模型二、SQL概述2.1SQL简介2.2通用语法2.3SQL分类三、DDL:操作数据库3.1查询3.2创建数据......
  • Codeforces Global Round 1
    A  题解:倒叙枚举即可。1#include<bits/stdc++.h>2usingnamespacestd;34typedeflonglongll;5constllN=1e6+3;6llb,k,a[N];7voidSolv......
  • C语言代码之判断回文数
    #include<stdio.h>//判断是否为回文数intmain(){ inta,n,s=0; printf("inputanumber:"); scanf("%d",&a); n=a; for(;;) { s=s*10+a%10; if(a/10==0) break; a=......