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)