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