在C#x的版本中一個值類型變量是不可以被賦予null值的否則會產生異常在C#中微軟提供了Nullable類型允許用它定義包含null值(即空值)的數據類型這對處理數據庫中包含可選字段以及很多方面都有很大幫助
定義Nullable類型
定義一個nullable類型非常類似於定義一個非nullable類型不同之處在於使用類型修飾符?比如定義一個整型如下
int myInt = ;要使一個整型變量可以存儲一個null值可以如下聲明
int? myNullableInt = ;這兩個變量看起來似乎是一樣的但事實並非如此實際上Nullable類型是一個結構體它有兩個公開可讀字段HasValue和ValueHasValue是一個布爾值當有值存儲時它為真當變量值為null時HasValue為假當HavValue為真是時可以取得變量的值為假時當嘗試取得變量的值時會拋出一個異常
現在null是C#的一個關鍵字它可以被賦給一個Nullable型變量下面是對Nullable型變量賦值的兩種有效方式
double? myDouble = ;double? myOtherDouble = null;可以看到myDouble被賦給一個值它也可以被賦以null在第二個語句中myOtherDouble被初始化為null——在一個非Nullable型變量中這樣做會產生異常
使用nullable類型 一個Nullable型變量可以像一般值類型那樣使用在編譯過程中Nullable型變量和非Nullable型變量會進行隱式田轉換就是說我們可以把一個標准整型賦給一個整型Nullable變量反之亦然參考下面示例代碼
int? nFirst = null;
int Second = ;
nFirst = Second;
// 可以
nFirst = ;
// 可以
Second = nFirst;
//也可以因為此時nFirst== nFirst = null;
// 可以
Second = nFirst;
// 拋出異常 Second 是一個非nullable型變量
可以看到只要一個Nullable型變量的值不是null它就可以和一個非Nullable型變量交換變量的值如果包含null值
就會拋出異常為避免異常發生可以利用Nullable型變量的HasValue屬性 if (nFirstHasValue) Second = nFirst;
如上所示如果nFirst 含有一個值這個賦值語句就會運行否則就會跳過
在Nullable值中使用操作符Lifed Operators【】 兩個相同類型的Nullable型和非Nullable型變量除了可以相互自動轉化之外還可以通過操作符在它們中進行操作參考下面代碼
[] [] []
From:http://tw.wingwit.com/Article/program/net/201311/14979.html