注意啦,c#中的??運算符是和?:運算符是不同的,這兩者是有區別的。
??運算符稱為null合並運算符,用於定義null值的類型和引用類型的默認值。
只當運算符的左操作數不為 null,此運算符將返回左操作數;否則返回右操作數。什么意思?我們來看個例子:
string x = null; string z = "不為空"; string y = x ?? z;
這里我定義了string類型的x為null,z不為空。因為x=null,所以返回右操作數,也就是z,所以y等於z。
在編寫單例模式的代碼的時候,我們常常需要判斷instance是否為空,間接來new單例對象。
那么這個運算符剛好派上用場。比如我寫個DownloadMrg單例類
public class DownloadMrg { public static DownloadMrg instance; public static DownloadMrg Instance { get { return instance ?? new DownloadMrg();//如果instance為null,就返回實例化單例對象 } } }
是不是看起來很簡潔,不用再用if判斷什么的,節省了很多時間。
我們再來看看?:運算符的實現。
條件運算符 (?:) 根據Boolean 表達式的值返回兩個值之一。 下面的是條件表達式的語法:
condition ? first_expression : second_expression;
只當condition為true,first_expression 才為結果,否則,second_expression為結果。
這個運算符也可以用來處理單例模式代碼:
public class DownloadMrg { public static DownloadMrg instance; public static DownloadMrg Instance { get { return (null == instance) ? new DownloadMrg() : instance; } } }