前言廢語
也怪自己小白和不勤奮,沒有系統的學習C#相關的東西,工作一年多還是初級小菜,深感不安,來到園子才發現好多鑽研技術的人,也漸漸發現自己開始喜歡上了這個編程的世界。今日偶遇??操作符,發現我只看見過三目運算符(?:),現在發現還有一個這個"掃地僧"一樣存在的運算符,於是到官網上看了一下,借助工具和自己的理解,來完成這篇??二目運算符的解釋。
定義
??被稱為【可空合並】運算符,是一個二目運算符,操作參數兩枚,其完成的功能為對左參數判斷之后進行賦值。
返回結果:如果左操作數不為空,則返回左操作數本身;如果左操作書為空,則返回右操作數。
格式:object1 ?? object2
1 //偽代碼示例 2 obejct NullCoalescingFunc( obejct object1,obejct obejct2) 3 { 4 if(object1==null) 5 return object1; 6 else 7 return object2; 8 }
備注
可空類型(Nullable type)的變量既可以表示原類型取值范圍內的值,也可以給其賦值為NULL(關於C#的可空類型是什么類型,此文暫且不論,讀者自己百度先)。所以假如左操作數是一個值為NULL的可空類型變量時,就可以使用??運算符來返回適當的值(右操作數的值)。假如開發者嘗試將一個可空類型變量的值賦給一個不可空類型的變量時,就會引起編譯錯誤不通過。亦或者在前后上下文沒有聲明可空類型的變量時,開發者使用強制轉換,會引發 InvalidOperationException 異常。
測試代碼
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; class NullCoalesce { static int? GetNullableInt() { return null; } static string GetStringValue() { return null; } static void Main() { int? x = null; int y = x ?? -1; Console.WriteLine(string.Format("x={0},y={1}",x,y)); int i = GetNullableInt() ?? default(int); Console.WriteLine(string.Format("i={0} ", i)); string s = GetStringValue(); Console.WriteLine(s ?? "Unspecified"); Console.ReadKey(); } }