位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# ?.运算符

提问人:刘团圆发布时间:2020-12-08

    这个操作符通常称为Elvis运算符或空条件运算符,有助于避免繁杂的空值检査造成的代码歧义。例如,如果想得到给定客户的订单数,就需要在设置计数值之前检查空值:

int count =0;

if (customer.orders ! = null)

{

  count = customer.orders.Count();

}

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

    int count = customer.orders.Count();

使用?.运算符,会把int?count设置为null,而不会抛出一个异常。

    int? count = customer.orders?.Count();

结合上一节讨论的空合并操作符??与空条件运算符?.可以在结果是null时设置一个默认值。

    int? count = customer.orders?.Count() ?? 0;

空条件运算符的另一个用途是触发事件。第13章详细讨论了事件。触发事件的最常见方法是使用如下代码模式:

var onChanged = OnChanged; 

if (onChanged != null)

{

  onChanged(this, args);

}

这种模式不是线程安全的,因为有人会在null检查己经完成后,退订最后一个事件处理程序。此时会抛出异常,程序崩溃。使用空条件运算符可以避免这种情形:

OnChanged?.Invoke{this, args);


在C:\BeginningCSharp7\Chapterl2\Chl2CardLib\Card.cs类的=运算符重载中,使用?.运算符检查null,可以避免在使用该方法时抛出异常。例如:

public static bool operator ==(Card cardlt Card card2)

    => (cardl?.suit == card2?.suit} && (cardl?.rank == card2?.rank);

在语句中包括空条件运算符,就清楚地表示:如果左边的对象(在本例中是rardl或card2)不为空,就检索右边的对象。如果左边的对象为空(即cardl或card2),就终止访问链,返回null。


继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部