What does x?.y?.z mean?

前端 未结 3 2043
感情败类
感情败类 2020-12-02 17:51

The draft spec for Pattern Matching in C# contains the following code example:

Type? v = x?.y?.z; 
if (v.HasValue) {
    var value = v.GetValueOrDefault();           


        
相关标签:
3条回答
  • 2020-12-02 18:30

    It is Null-propagating operator / Null-Conditional Operator ?. a new proposed feature in C# 6.0

    x?.y?.z means

    • first, check if x is not null, then check y otherwise return null,
    • second, when x is not null then check y, if it is not null then return z otherwise return null.

    The ultimate return value will be z or null.

    Without this operator if x is null, then accessing x.y would raise a Null Reference Exception, the Null-Conditional operator helps to avoid explicitly checking for null.

    It is a way to avoid Null Reference Exception.

    See: Getting a sense of the upcoming language features in C#

    8 - Null-conditional operators

    Sometimes code tends to drown a bit in null-checking. The null-conditional operator lets you access members and elements only when the receiver is not-null, providing a null result otherwise:

    int? length = customers?.Length; // null if customers is null
    
    0 讨论(0)
  • 2020-12-02 18:34

    Be aware that this language feature is only available in C# 6 and later.

    It's effectively the equivalent of:

    x == null ? null
       : x.y == null ? null
       : x.y.z
    

    In other words, it's a "safe" way to do x.y.z, where any of the properties along the way might be null.

    Also related is the null coalescing operator (??), which provides values to substitute for null.

    0 讨论(0)
  • 2020-12-02 18:45
     this.SlimShadies.SingleOrDefault(s => s.IsTheReal)?.PleaseStandUp();
    

    Basically.

    0 讨论(0)
提交回复
热议问题