使用可空型別(Nullable

2022-02-09 21:18:56 字數 1669 閱讀 3678

可空型別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 雙問號用於判斷乙個變數...