[C# 6.0] 空值判斷寫法 ?.

  • 8404
  • 0

C# 6.0 新增較為簡易的判斷式語法

在 Linq 中,我們常會使用 FirstOrDefault() 來取得第一項

如果物件的類型是非實質型別或 Nullable 當無資料時則會回傳 null

以下是一個範例

class Program
{
    static void Main(string[] args)
    {
        List<Obj> items = new List<Obj>();

        int? firstItemValue = null;

        var firstItem = items.FirstOrDefault();
        if (firstItem != null)
            firstItemValue = firstItem.Arg;

        Console.WriteLine(firstItemValue);
    }
}

class Obj
{
    public int? Arg{ get; set; }
}

為了要取得第一項的 Args 屬性內容,經常的做法是呼叫完 FirstOrDefault() 之後進行一次判斷

避免在執行過程中出現 NullReferenceException

var firstItem = items.FirstOrDefault();
if (firstItem != null)
    firstItemValue = firstItem.Arg;

 

而如果我們必須在一整大串的充滿著 Join、GroupBy、Select 運算式內判斷

上述的方法可能會遇到障礙,因為 if else 無法使用

 

在 C# 6.0 中多了 ?. 語法 (null-conditional operator)

代表意義為

如果目標物件是空的就停止判斷,否則進行後續行為

 

那麼原先的較為冗長的判斷即可調整像下面這樣

int? firstItemValue = items.FirstOrDefault()?.Arg;

這樣就算第一項是空的,也可以順利的完成運算
甚至給訂其它預設值

int firstItemValue = items.FirstOrDefault()?.Arg?? -1;

 

Reference:

Null-conditional Operators (C# and Visual Basic)

What does question mark and dot operator ?. mean in C# 6.0?

C# : The New and Improved C# 6.0