C# 中的這個運算子 "??" 主要用途是用來檢查變數的值是不是為 null,以往我們常用的方法是: 
[code:c#]
    if (str2 != null) { str1 = str2; } else { str1 = "N/A"; }
[/code] 
或是 
[code:c#]
    string str1 = (str2 != null) ? str2 : "N/A";
[/code] 
現在我們多了一種選擇,就是使用 "??" 運算子,如下範例中,如果 str2 不是 null 就會傳回 str2(左運算元),否則傳回 "N/A"(右運算元): 
[code:c#]
    string str1 = str2 ?? "N/A";
[/code] 
是不是比較簡單呢? ^_^ 
舉個更明確的例子: 
1. 因為在有些時候,嘗試將「可為 null 的型別」指派給「不可為 null 的型別」時,將會產生編譯時期錯誤。這時使用 ?? 運算子就非常方便,你可以用 ?? 指定變數為 null 時應該給被指定的變數什麼「預設值」! 
2. 另外,我們常常在做「型別轉換」時,如果轉換的型別是可為 Null 的型別但目前為未定義,執行的時候則將會擲回 InvalidOperationException 例外狀況,使用 ?? 運算子可以很迅速的解決這問題。 
以下是從 MSDN 擷取的範例,我用自己的話註解說明: 
[code:c#]
using System;
class MainClass
{
    // 取回可為 null 的 int 型別的方法
    static int? GetNullableInt()
    {
        return null;
    } 
    // 取回型別為 null 的方法
    static string GetStringValue()
    {
        return null;
    } 
    static void Main()
    {
        // ?? 運算子範例
        int? x = null; 
        // 若 x 為 null 就回傳 -1,否則就會傳 x
        int y = x ?? -1; 
        // 這範例用來展示 Method 回傳的值可能是 null
        // 使用 ?? 運算子檢查若為 null 則使用 default(int) 代替
        int i = GetNullableInt() ?? default(int); 
        string s = GetStringValue();
        // ?? 運算子也適用於「參考型別」
        // 如果 s 為 null 時顯示 "Unspecified".
        Console.WriteLine(s ?? "Unspecified");
    }
}
[/code]