先來看一段**:
null值用來表示資料型別未被賦予任何值,它是一種引用型別且它只能賦值給引用型別,由於string是乙個特殊的引用型別,因此編譯器不會報錯。
但是當它賦值給值型別int型別的時候,編譯器就會報錯:
我們知道資料庫中是有null值的,例如下面的一張表,年齡(int型別)是可以為空的,代表目前不知道此人年齡,那麼當我們在c#**向資料庫插入資料時,就會需要乙個可空的int型別。
但是int、bool等這些型別不能表示資料庫中的「null」 。因此c#提供了「可空型別」這種語法,只要在型別後加?就構成了可空的資料型別,比如int?、bool?,這樣
int? i=null 就可以了。解決資料庫中int可以為null,而c#中int不能為null的問題。
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace 可空資料型別}}
由於i為空,所以不會有任何資料顯示。
t?其實是system.nullable的簡寫,可空型別在ado.net程式設計中大量使用,用來解決資料庫與c#**資料型別不一致的問題。
來看一下msdn文件中關於system.nullable的說明:
system.nullable的定義:
由它的定義可知:判斷可空型別是否為空,用i==null或者i.hasvalue;得到可空變數的值,int i1=(int)i.value或者int i1=i.value。
型別轉換:不可空型別賦值給可空型別無需顯式轉換(一定成功),可空型別賦值給不可空型別則需顯式轉換(不一定成功)
如果int? i3 = null;
如果int? i3 = 8;
C 可空資料型別
資料庫中的數字和程式語言中的數字有顯著不同的特徵,因為資料庫中的數字可以為空,c 中的數字不能為空。int32是乙個結構,而結構是值型別的,所以它不能為空。在c 中可以使用nullable結構很容易解決這個問題。定義可空型別 1 nullablex 2 int?x2 可以檢查nullable的has...
C 中可空型別
c 提供了乙個特殊的資料型別,nullable 型別 可空型別 可空型別可以表示其基礎值型別正常範圍內的值,再加上乙個 null 值。例如,nullable int32 讀作 可空的 int32 可以被賦值為 2,147,483,648 到 2,147,483,647 之間的任意值,也可以被賦值為 ...
C 可空型別
可空型別只能用於值型別,不能用於引用型別,引用型別本身支援null值。如果直接把null賦值給int型別,會出現乙個錯誤 無法將 null 轉換成 int 因為它是一種值型別 賦值時應該使用 int?a null 可空型別與一元或二元運算子一起使用是,如果乙個運算元或兩個運算元都是null,其結果為...