专栏名称: MC_DEV_JIN
片刻之欢娱,不如须臾之所学也!
今天看啥  ›  专栏  ›  MC_DEV_JIN

C#6.0 运算符 '?' ,'??','?.'

MC_DEV_JIN  · 简书  ·  · 2017-08-27 23:42

文章预览

可空类型与运算符

int? nullableInt;

int? 是System.Nullable<int>的缩写。

运算符

对于简单类型(如int)可以使用+、-等运算符来处理数值,而对于对应的可空类型也可以:包含在可空类型的数值会隐式转换为需要的类型,使用适当的运算符。(也适用于结构和自己的运算符

int ? op1 =1;

int ? result = op1 *2;//注意 result的类型为:int?

??运算符【空间结合运算符】(null coalescing operator)

这是一个二元运算符,允许给肯能等于null的表达式提供另一个值。第一个操作数不是null,

该运算符就等于第一个操作数,否则改运算符等于第二的操作数;eg:

下面这个两个表达式的作用是相同的:

op1 ?? op2

op1 == null ?op2:op1

op1可以是可空表达式,包含引用类型或者可空类型。 如果可空类型为null,??预算符就会提供默认值。

int ? op1 =null;

int result = op1*2??5;

op1是null,所以op1*2也是null。但是,??运算符检测这个情况,并把值5赋予result。这里注意,放入int的变量result不需要显示转换。??运算符会自动处理这个转换。


?.运算符

这个操作符通常称为 Elvis 运算符或者 空条件运算符, 有助于避免空值检查早成的代码歧义。

int count =0;

if(customer.orders !=null)

{

count = customer.orders.Count();

}

如果只编写这段代码,但客户没有订单(null)就会抛出 System.ArgumentNullException:

int count =customer.orders.Count();

int? count = customer.orders?.Count();//int ? 设置 count 为Null  不抛出异常;

空条件运算符的另一个作用是触发事件:

var  onChanged = OnChanged;

if(onChanged!=null)

{

onChanged (this,args);

}

这种模式线程不安全的,有情况:检测null完成后,退订最后一个事件处理程序,抛出异常

可用下面替换:

OnChanged?.Invoke(this,args);

………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览