1. 程式人生 > >C#中 ? 和?? 的用法

C#中 ? 和?? 的用法

1

2

3

4

5

6

7

8

C#中 ?? 和? 的意思

1.?

如果直接定義一個 值型別,給負值null;就會提示“無法將

Null轉換成‘值型別(比如:int)’,因為他是一種不可為null的值

de型別”

例如

int in=null;//錯誤

int? in=null;//正確

1

string result=null;//正確 因為string是引用型別不是值類

1

2

3

4

5

string? result=null;//錯誤,因為?,只能用於值型別

2.??

var name??:“Hello World!”;//如果name為null,就選擇後面那個值,有點類似 var name=name?"Hello World!" :name;

補充:

可空型別可以表示基礎型別的所有值,另外還可以表示 null 值。可空型別可通過下面兩種方式中的一種宣告:

1、System.Nullable<T> variable

2、T? variable

T 是可空型別的基礎型別。T 可以是包括 struct 在內的任何值型別;但不能是引用型別。

1

2

3

4

5

6

7

8

9

10

Nullable<int> x =5等價於 int?x=5 可空型別

1.值型別後加問號表示此型別為可空型別,如int? i = null

2.可空型別與一元或二元運算子一起使用時,只要有一個運算元為null,結果都為null

3.比較可空型別時,只要一個運算元為null,比較結果就為false

在使用的時候要注意如下幾點:

(1)因為可空型別可能為空,於是很多運演算法則將不再簡單適用,比如A+B,如果A或者B當中有一個或者兩個為可空型別,那麼它們便不能簡單相加,因為它們可能會為空,這時結果也就可能會為空,所以一定要先使用HasValue屬性測試是否為空,或者使用GetValueOrDefault屬性返回該基礎型別所賦的值或預設值,再或者使用??運算子分配預設值,當前值為空的可空型別被賦值給非空型別時將應用該預設值,比如

int?x=null;int y=x??-1;,但是切不可直接進行運算。

(2)可空型別可以強制轉換為對應的基礎型別,比如int?x=3;int y=(int)x;,但在轉換之前一定要先測試是否不為空,如果為空的話就會出錯。

(3)由於以上兩點原因,建議不要隨意使用可空型別,只在必要的時候才使用,使用時一定要小心謹慎,隨時記得判斷是否為空。