2013年5月29日 星期三

[C#]?? Operator (null coalescing operator)

?? operator可以被用在nullable types以及reference types
語法的意思很簡單:如果operand不是null,把他回傳給我;否則給我一個預設的值。比如說以下例子因為x是null所以y被預設成5。
int? x = null;
int y = x ?? 5;  // y is 5
first ?? second語法被執行的步驟如下:

  1. 檢查first 
  2. 如果first不是null,回傳first 
  3. 如果first是null,回傳second

?? operator可以用來串接多個nullable variable以及reference variable。會回傳第一個不是null的變數。以下範例會印出1,因為a是null。
int? a = null, b = 1, c = 2;
Console.WriteLine (a ?? b ?? c);  // 1
善用?? operator可以讓我們的程式碼變得更簡潔,以下是一個範例程式用來計算使用者的年紀,這個例子沒有使用?? operator。
DateTime birth;
DateTime? death;
public TimeSpan Age
{
    get
    {
        if (death == null)
        {
            return DateTime.Now - birth;
        }
        else
        {
            return death.Value - birth;
        }
    }
}
使用?? operator我們可以把上面的範例改寫成好懂又精簡的版本。
DateTime birth;
DateTime? death;
public TimeSpan Age
{
    get
    {
        DateTime lastAlive = death ?? DateTime.Now;
        return lastAlive – birth;
    }
}

1 則留言: