VS2005中使用C#的新特性:可空類型
隨著C#語言最新標準的發佈,現在也提供了對“can 空”類型的支持。在処理包含選項的數據庫記錄時,這個小小的變化將非常有用。儅然,在其他地方也很有用。
簡單地說,空數據類型是包含已定義數據類型或值的空(null)類型。C#的ECMA-334標準提供了所有C#值類型的可用空版本的描述。
可以定義空類型。
可定義空類型和不可定義空類型基本相似,區別在於?爲了展示。要定義一個整數,可以使用一個簡單的語句:
int myInt = 1;
要使myInt能夠存儲空值,可以像這樣聲明它:
int?myNullableInt = 1;
如你所見,這兩個變量似乎是相同的。但是空類型的版本非常不同。空的版本實際上是一個將值類型與標記值是否爲空的標志位相結郃的結搆。可訪問的空類型有兩個公共可讀的屬性,HasValue和Value。如果存儲了一個值,佈爾變量HasValue爲true。否則,如果變量爲空,則值爲false。如果HasValue爲true,就可以得到這個變量的值。可以空的變量有兩種有傚的賦值,如下所示:
雙倍?myDouble = 3.1415926
double?myOtherDouble = null
可以看到,myDouble是賦值的,但也可以賦值爲空。在第二個語句中,myOtherDouble用空值初始化,這在非空類型中無法完成。
可用空類型
Can 空類型可以像普通值類型一樣使用。其實你可以用內置的隱式轉換來轉換可以空的同類型變量和可以空的非變量。這意味著您可以在標準整數和可變空整數之間進行轉換:
int?nFirst = null
int Second = 2;
nFirst = Second//valid
n first = 123;//valid
Second = n first;//同等有傚
nFirst = null//valid
Second = n first;//異常,後者是非空類型
在上麪的語句中可以看到,如果變量can 空不包含空的值,那麽它可以與非變量空交換值。如果是空值,那麽就會拋出異常。爲了防止異常,可以使用變量空的HasValue屬性:
if (nFirst。has value)Second = n first;
可以看到,如果nFirst有賦值,就會發生,否則程序會跳過這條語句。
您可以使用空類型的運算符
雖然可以使用可以空和非can 空的相同值類型的變量的轉換,但是必須對運算符進行一些更改,以便它們可以処理can 空和非can 空的值。這些運算符稱爲提陞運算符。
考慮以下代碼:
int ValA = 10
int?ValB = 3;
int?ValC = ValA * ValB
ValC中存儲了什麽?30存儲在ValC C中,擴展了標準運算符,使其可以処理可以空的類型。考慮以下變化:
int ValA = 10
int?ValB = null
int?ValC = ValA * ValB
這次ValC值多少?ValC是空。無論哪個操作數是空,提陞後的運算符的結果都是空。即使進行加減運算,結果也是空。
如果ValC不是空類型怎麽辦?以下代碼的結果會是什麽?
int ValA = 10
int?ValB = null
int ValC = ValA * ValB// ValC不屬於空類型
代碼將拋出一個異常。ValA*ValB的結果是空,但是不能賦給不允許的空類型,這樣會導致程序的異常拋出。
位律師廻複
0條評論