可空型別nullable是.net framework 2.0中新增的型別,用它宣告的值型別,除了存值之外,還可以表示為null,即該型別的變數可以為空。
下面是nullable結構的定義:
1namespace
system212
13public
t value
1415
public
override
bool
equals(
object
other );
1617
public
override
intgethashcode();
1819
public
t getvalueordefault();
2021
public
t getvalueordefault( t defaultvalue );
2223
public
override
string
tostring();
24}25
} 從定義可以看出,nullable結構中的型別引數t必須是乙個結構,這就意味著nullable只支援將值型別用作可空型別,因為引用型別本身就是可空的。另外還可以看出,將值型別(如int)可以隱式地轉換為可空型別,而可空型別轉換為值型別則要進行顯式轉換。nullable還有兩個重要的屬性:hasvalue和value,前者判斷變數內是值還是null,並返回乙個布林值,後者用於取出相應型別的值。很明顯如何可空型別的變數此時儲存的是null,那麼使用value屬性會產生異常(invalidoperationexception)。
使用nullable宣告乙個儲存int值的可空型別變數,可以這樣寫:
1nullable
<
int>a =
null
;這樣變數a既可以儲存整型值,也可以儲存null了。在c#中還有簡化的寫法:
int?a =
null
;這樣用起來更加方便。
有了可空型別,那麼在從資料庫中取值時,如果碰到了null值,語句能簡化一些,例如,如果不使用可空型別,那麼語句可能會這樣寫:
1if(datareader[
"ssn"]
==dbnull.value)
2ssn =-
1; //null 用 -1 代替
3else
4ssn
=convert.toint64(datareader[
"ssn
"]);
因為傳統的值型別不能為null,所以必須為資料庫中的null值提供乙個無效的值,有時候這個無效的值並不好找。而使用可空型別,變數可以為null,那麼我們就可以這樣寫:
1ssn
=datareader[
"ssn"]
==dbnull.value ?(
long?)
null
: convert.toint64(datareader[
"ssn
"]);
在訪問可空型別變數中的值時,最好先檢查一下hasvalue屬性,判斷一下是否有值,以避免異常發生,例如:
1if(ssn.hasvalue)
2", ssn);
5}總之,適當地使用可空型別,能夠簡化**,減少一些麻煩。
可空型別(Nullable)
單問號用於對 int,double,bool 等無法直接賦值為 null 的資料型別進行 null 的賦值,意思是這個資料型別是 nullable 型別的。int?i 3 等同於nullablei new nullable 3 int i 預設值0 int?ii 預設值null 雙問號 可用於判斷乙...
C 可空型別(Nullable)
bool?boolval new bool?顯示值 console.writeline 顯示可空型別的值 num1,num2,num3,num4 console.writeline 乙個可空的布林值 boolval console.readline bool?boolval new bool?顯示值...
C 可空型別(Nullable)
單問號用於對int double bool等無法直接賦值為 null 的資料型別進行 null 的賦值,意思是這個資料型別是 nullable 型別的。int?i 3 等同於 nullablei new nullable 3 int i 預設值0 int?ii 預設值null 雙問號用於判斷乙個變數...