static void Main(string[] args) { //空合並行運算?? /*?? 提供了一種快捷方式,可以在處理可空類型和引用類型時表示null值的可能性,這個運算符放在 兩個操作數之間,第一個操作數必須是一個可空類型或者引用類型,第二個操作數必須與第一個操作數 類型相同,或者可以隱式轉換為第一個操作數的類型 1、如果第一個操作數不是null,整個表達式就等於第一個操作數的值; 2、如果第一個操作數是null, 整個表達式就等於第二個操作數的值 */ int? a = null; int b; b = a ?? 10; a = 3; Console.WriteLine(b); // 10 b = a ?? 10; Console.WriteLine(b); //3 //空值傳播運算符 object?.method; /* * 生產環境中代碼會檢查驗證變量空值條件,訪問變量時需要檢查判斷是否為null,否則會拋出NullReferenceException, 但是有時很容易忘記這樣的檢查,可以利用空值傳播的特性來簡化代碼 */ int? d = 2; Console.WriteLine(d?.ToString().GetType().Name); // String d = null; Console.WriteLine(d?.ToString().GetType().Name); // null //當空值傳播類型訪問int類型的屬性時,不能將結果直接分配給int,因為結果可能為null,可以將結果分配為可空的int? //當然我們也可以結合空合並行運算符的特性??來實現 Person p = new Person(); int e = p?.Age ?? 666; Console.WriteLine(e); //123 p = null; e = p?.Age ?? 666; Console.WriteLine(e); //666 //當然也可以將這種特性用於數組的可空判斷 int[] arr = null; Console.WriteLine(arr?[0]); //null arr = new[] {1, 2, 3}; Console.WriteLine(arr?[0]); //1 Console.ReadKey();