【C#6.0语法】可空表达式 ?.

可空表达式只能是 C# 6.0+ 才可以使用,VS2015+ 版本才支持。

在这个表达式出现之前,当我们得到一个对象时,并想要使用这个对象之前,都必须先判断该对象是否为 null,否则使用对象时就会抛出 NullReferenceException 异常(未将对象引用设置到对象的实例)。就像下面这个例子:

public static void Main(string[] args)
{
    var user = GetUser(1);
    if(user == null)
    {
        //这里可以自定义
        throw new NullReferenceException("指定的用户没有找到");
    }

    //当 user 对象不是 null 时,我们才可以这样
    var name = user.Name;
    var password = user.Password;
}

现在使用可空表达式(?.) 问号点

当对象是 null 时不访问后面点的对象

比如刚才的代码,我们就可以这样使用:

public static void Main(string[] args)
{
    var user = GetUser(1);
    var name = user?.Name;
    var password = user?.Password;
}

?. 表达式将声明对象转换成了可为空类型
比如上面的代码是字符串,那如果我是一个 int 类型的会是怎样?

int? age = user?.Age;
题外话

数据类型后面加一个问号,表示该类型可以是 null。你可以通过该对象的 HasValue 属性做一个判断,表示该对象有值,然后再使用该对象的 Value 属性获取到值。

int? age = user?.Age;
if(age.HasValue)
{
    Console.Write(age.Value);
}

再举一个例子:

public event EventHandler OnEventChange; // 声明一个事件
//...中间忽略

//不使用可空表达式时
if(OnEventChange != null) // 判断该时间是否被订阅
{
    OnEventChange();
}

//使用可空表达式
OnEventChange?.Invoke();

老司机的总结

很明显可空表达式减少了一层判断,明显减少了我们的代码量,也提高了我们的效率。当然我们也需要选择性使用,而不是滥用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我 Teacher 周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值