C 可空型別

2021-10-05 09:07:59 字數 868 閱讀 9187

在一些情況下,這可能是乙個問題。

c#有乙個解決方案: 可空型別。 可空型別是可以為空的值型別。 可空型別只需要在型別的後面新增  " ? " 。

在下面的**片段中, x1 是乙個普通的 int , x2 是乙個可以為空的 int。 因為 x2 是可以為空的 int, 所以可以吧 null 分配給 x2:

int x1 = 1;

int? x2 = null;

因為 int 值可以分配給 int? 所以給 int? 傳遞乙個int變數是允許的

int? x3 = x1;
但是反過來就不可以了, int?不能直接分配給 int, 因此需要乙個型別轉換:

int x4 = (int) x3;
當然,如果 x3 的值是乙個 null, 型別轉換操作就會發生異常。 更好的方法是使用可空型別的 hasvalue 和 value 屬性。 hasvalue返回true 或 false, 這取決於可空型別是否有值, value 返回底層的值。 

int x5 = x3.hasvalue ? x3.value :-1; // 如果x3的值為null 就返回false ,會把 -1賦值給 x5
使用合併操作符,可以讓**變的更簡潔。

int x6 = x3 ?? -1; // 如果x3的值是null , 則把 -1賦值給 x6
注意:對於可空型別,可以使用能用於基本型別的所有可用操作符, 例如可用於 int? 的 +、-、*、/ 等。 每個結構型別都可以使用可空型別, 而不僅是預定義的c#型別

C 可空型別

可空型別只能用於值型別,不能用於引用型別,引用型別本身支援null值。如果直接把null賦值給int型別,會出現乙個錯誤 無法將 null 轉換成 int 因為它是一種值型別 賦值時應該使用 int?a null 可空型別與一元或二元運算子一起使用是,如果乙個運算元或兩個運算元都是null,其結果為...

C 可空型別

c 提供了乙個特殊的資料型別,nullable型別 可空型別 可空型別可以表示其基礎值型別正常範圍內的值,再加上乙個 null 值。例如,nullable int32 讀作 可空的 int32 可以被賦值為 2,147,483,648 到 2,147,483,647 之間的任意值,也可以被賦值為 n...

C 可空型別

c 提供了乙個特殊的資料型別,nullable型別 可空型別 可空型別可以表示其基礎值型別正常範圍內的值,再加上乙個 null 值。例如,nullable int32 讀作 可空的 int32 可以被賦值為 2,147,483,648 到 2,147,483,647 之間的任意值,也可以被賦值為 n...