查看: 102|回复: 0

C# 中检查null的语法糖

[复制链接]

4

主题

9

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2023-3-26 17:13:15 | 显示全部楼层 |阅读模式
一、??如果左边是的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();
转自:王者天涯
链接:http://cnblogs.com/dotnet-college/p/17067371.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表