空接合運算子, 可空型別和運算子,typeof

2022-01-19 06:28:47 字數 1298 閱讀 7843

空接合運算子空接合運算子(??)提供了一種快捷方式,可以在處理可空型別和引用型別時表示null值。這個運算子放在兩個運算元之間,第乙個運算元必須是乙個可空型別或引用型別,第二個運算元必須與第乙個運算元的型別相同,或者可以隱含地轉換為第乙個運算元的型別。空接合運算子的計算如下:如果第乙個運算元不是null,則整個表示式就等於第乙個運算元的值。但如果第乙個運算元是null,則整個表示式就等於第二個運算元的值。例如:

int? a = null;

int b;

b = a ?? 10;     // b has the value 10

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 = null

int? c = a * 5;      // c = null

但是在比較可空型別時,只要有乙個運算元是null,比較的結果就是false。即不能因為乙個條件是false,就認為該條件的對立面是true,這在使用非可空型別的程式中很常見。例如:

int? a = null;

int? b = -5;

if (a >= b)

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...