美文网首页
C#6.0 运算符 '?' ,'??&#

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

作者: MC_DEV_JIN | 来源:发表于2017-08-27 23:42 被阅读38次

    可空类型与运算符

    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);

    相关文章

      网友评论

          本文标题:C#6.0 运算符 '?' ,'??&#

          本文链接:https://www.haomeiwen.com/subject/caoidxtx.html