C#中的?

a)? 可空类型修饰符.
引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。

int? age=null;


b)?: 三元运算符.

str=age<18?"未成年":"已成年";


表示如果条件成立,则返回"未成年",否则返回"已成年"。这是省略if{}else{}的简单形式。
c)?? 空合并运算符.

a=b??c


如果b为null,则a=c;如果b不为null,则a=b.
d)?. NULL检查运算符.用于判断对象是否为空并获取对象的某个属性的值,可以代替if判断,简化代码。例如我们要获取一个Point序列的第一个点的X坐标,第一感觉会这么写:

int firstX = points.First().X;

但是,老鸟会告诉你,这儿没有进行NULL检查,正确的版本是这样的:  
 

int? firstX = null;  
if (points != null)  
{  
    var first = points.FirstOrDefault();
    if (first != null) firstX = first.X;  
}

正确倒是正确了,代码取变得难读多了。在C# 6.0中,引入了一个 ?. 的运算符,前面的代码可以改成如下形式:

int? firstX = points?.FirstOrDefault()?.X;

从这个例子中我们也可以看出它的基本用法:如果对象为NULL,则不进行后面的获取成员的运算,直接返回NULL

需要注意的是,由于"?."运算符返回的可以是NULL,当返回的成员类型是struct类型的时候,"?."和"."运算符的返回值类型是不一样的。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值