空接合運算子空接合運算子(??)提供了一種快捷方式,可以在處理可空型別和引用型別時表示null值。這個運算子放在兩個運算元之間,第乙個運算元必須是乙個可空型別或引用型別,第二個運算元必須與第乙個運算元的型別相同,或者可以隱含地轉換為第乙個運算元的型別。空接合運算子的計算如下:如果第乙個運算元不是null,則整個表示式就等於第乙個運算元的值。但如果第乙個運算元是null,則整個表示式就等於第二個運算元的值。例如:
int? a = null;b = a ?? 10; // b has the value 10int b;
a = 3;
b = a ?? 10; // b has the value 3
錯誤的寫法:
int? i = null;
string a=string.empty;
a=i??1; //整型無法隱式轉換為string.
如果第二個運算元不能隱含地轉換為第乙個運算元的型別,就生成乙個編譯錯誤。
可空型別和運算子
對於布林型別,可以給它指定true或false值。但是,要把該型別的值定義為undefined,該怎麼辦?此時使用可空型別可以給應用程式提供乙個獨特的值。如果在程式中使用可空型別,就必須考慮null值在與各種運算子一起使用時的影響。通常可空型別與一元或二元運算子一起使用時,如果其中乙個運算元或兩個運算元都是null,其結果就是null。例如:
int? a = null;
int? b = a + 4; // b = nullint? c = a * 5; // c = null
但是在比較可空型別時,只要有乙個運算元是null,比較的結果就是false。即不能因為乙個條件是false,就認為該條件的對立面是true,這在使用非可空型別的程式中很常見。例如:
int? a = null;if (a >= b)int? b = -5;
console.writeline("a >= b");
else
console.writeline("a < b");
注意:null值的可能性表示,不能隨意合併表示式中的可空型別和非可空型別
typeof運算子
typeof運算子返回乙個表示特定型別的system.type物件。例如,typeof(string)返回表示system.string型別(引數string)的type物件。在使用反射技術動態查詢物件的資訊時,這個運算子是很有效的。
空接合運算子, 可空型別和運算子,typeof
空接合運算子空接合運算子 提供了一種快捷方式,可以在處理可空型別和引用型別時表示null值。這個運算子放在兩個運算元之間,第乙個運算元必須是乙個可空型別或引用型別,第二個運算元必須與第乙個運算元的型別相同,或者可以隱含地轉換為第乙個運算元的型別。空接合運算子的計算如下 如果第乙個運算元不是null,...
C 可空型別和空接合運算子
隨手翻閱c 高階程式設計時,看到可空型別和運算子這一節,又發現了自己的乙個c 知識盲點。可空型別 可空型別只能用於值型別,不能用於引用型別,引用型別本身支援null值。如果直接把null賦值給int類 型,會出現乙個錯誤 無法將 null 轉換成 int 因為它是一種值型別 賦值時應該使用 int?...
c 空接合 運算子的運用
相信很多人都看到?運算子,但是不一定每個人都知道它是用來做什麼的,之前我也看到過很多次,但是因為一直沒有去用過,所以也沒有了解他的作用,今天又看到了,所以查了的msdn,原來?運算子叫做空接合運算子,作用是,要判斷乙個物件是否為null,如果為null那麼給賦於乙個預設的值,做法相當的麻煩.例如 i...